diff options
author | Tejun Heo <tj@kernel.org> | 2016-08-10 11:23:44 -0400 |
---|---|---|
committer | Tejun Heo <tj@kernel.org> | 2016-08-10 11:23:44 -0400 |
commit | 3abb1d90f5d930c6183534a624aa0158a71bc5eb (patch) | |
tree | 62543ceb8d76287bf17c84ad1d756a29b4beb29c /include/linux/cgroup.h | |
parent | 0e0b2afdf644aa523f5eb10ce1f9e3c6cd8362ec (diff) | |
download | talos-obmc-linux-3abb1d90f5d930c6183534a624aa0158a71bc5eb.tar.gz talos-obmc-linux-3abb1d90f5d930c6183534a624aa0158a71bc5eb.zip |
kernfs: make kernfs_path*() behave in the style of strlcpy()
kernfs_path*() functions always return the length of the full path but
the path content is undefined if the length is larger than the
provided buffer. This makes its behavior different from strlcpy() and
requires error handling in all its users even when they don't care
about truncation. In addition, the implementation can actully be
simplified by making it behave properly in strlcpy() style.
* Update kernfs_path_from_node_locked() to always fill up the buffer
with path. If the buffer is not large enough, the output is
truncated and terminated.
* kernfs_path() no longer needs error handling. Make it a simple
inline wrapper around kernfs_path_from_node().
* sysfs_warn_dup()'s use of kernfs_path() doesn't need error handling.
Updated accordingly.
* cgroup_path()'s use of kernfs_path() updated to retain the old
behavior.
Signed-off-by: Tejun Heo <tj@kernel.org>
Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Acked-by: Serge Hallyn <serge.hallyn@ubuntu.com>
Diffstat (limited to 'include/linux/cgroup.h')
-rw-r--r-- | include/linux/cgroup.h | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/include/linux/cgroup.h b/include/linux/cgroup.h index 984f73b719a9..5a9abdee43fe 100644 --- a/include/linux/cgroup.h +++ b/include/linux/cgroup.h @@ -541,7 +541,12 @@ static inline int cgroup_name(struct cgroup *cgrp, char *buf, size_t buflen) static inline char * __must_check cgroup_path(struct cgroup *cgrp, char *buf, size_t buflen) { - return kernfs_path(cgrp->kn, buf, buflen); + int ret; + + ret = kernfs_path(cgrp->kn, buf, buflen); + if (ret < 0 || ret >= buflen) + return NULL; + return buf; } static inline void pr_cont_cgroup_name(struct cgroup *cgrp) |