mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-16 10:17:32 +00:00
ceph: give up on paths longer than PATH_MAX
If the full path to be built by ceph_mdsc_build_path() happens to be longer than PATH_MAX, then this function will enter an endless (retry) loop, effectively blocking the whole task. Most of the machine becomes unusable, making this a very simple and effective DoS vulnerability. I cannot imagine why this retry was ever implemented, but it seems rather useless and harmful to me. Let's remove it and fail with ENAMETOOLONG instead. Cc: stable@vger.kernel.org Reported-by: Dario Weißer <dario@cure53.de> Signed-off-by: Max Kellermann <max.kellermann@ionos.com> Reviewed-by: Alex Markuze <amarkuze@redhat.com> Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
This commit is contained in:
parent
d6fd6f8280
commit
550f7ca98e
@ -2800,12 +2800,11 @@ retry:
|
|||||||
|
|
||||||
if (pos < 0) {
|
if (pos < 0) {
|
||||||
/*
|
/*
|
||||||
* A rename didn't occur, but somehow we didn't end up where
|
* The path is longer than PATH_MAX and this function
|
||||||
* we thought we would. Throw a warning and try again.
|
* cannot ever succeed. Creating paths that long is
|
||||||
|
* possible with Ceph, but Linux cannot use them.
|
||||||
*/
|
*/
|
||||||
pr_warn_client(cl, "did not end path lookup where expected (pos = %d)\n",
|
return ERR_PTR(-ENAMETOOLONG);
|
||||||
pos);
|
|
||||||
goto retry;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
*pbase = base;
|
*pbase = base;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user