mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-28 13:22:57 +00:00
kernfs: Fix range checks in kernfs_get_target_path
[ Upstream commit a75e78f21f
]
The terminating NUL byte is only there because the buffer is
allocated with kzalloc(PAGE_SIZE, GFP_KERNEL), but since the
range-check is off-by-one, and PAGE_SIZE==PATH_MAX, the
returned string may not be zero-terminated if it is exactly
PATH_MAX characters long. Furthermore also the initial loop
may theoretically exceed PATH_MAX and cause a fault.
Signed-off-by: Bernd Edlinger <bernd.edlinger@hotmail.de>
Acked-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
10ffb20b91
commit
e32819f088
1 changed files with 4 additions and 1 deletions
|
@ -63,6 +63,9 @@ static int kernfs_get_target_path(struct kernfs_node *parent,
|
|||
if (base == kn)
|
||||
break;
|
||||
|
||||
if ((s - path) + 3 >= PATH_MAX)
|
||||
return -ENAMETOOLONG;
|
||||
|
||||
strcpy(s, "../");
|
||||
s += 3;
|
||||
base = base->parent;
|
||||
|
@ -79,7 +82,7 @@ static int kernfs_get_target_path(struct kernfs_node *parent,
|
|||
if (len < 2)
|
||||
return -EINVAL;
|
||||
len--;
|
||||
if ((s - path) + len > PATH_MAX)
|
||||
if ((s - path) + len >= PATH_MAX)
|
||||
return -ENAMETOOLONG;
|
||||
|
||||
/* reverse fillup of target string from target to base */
|
||||
|
|
Loading…
Reference in a new issue