Arnd Bergmann 5696aad6bf ftruncate: pass a signed offset
commit 4b8e88e563b5f666446d002ad0dc1e6e8e7102b0 upstream.

The old ftruncate() syscall, using the 32-bit off_t misses a sign
extension when called in compat mode on 64-bit architectures.  As a
result, passing a negative length accidentally succeeds in truncating
to file size between 2GiB and 4GiB.

Changing the type of the compat syscall to the signed compat_off_t
changes the behavior so it instead returns -EINVAL.

The native entry point, the truncate() syscall and the corresponding
loff_t based variants are all correct already and do not suffer
from this mistake.

Fixes: 3f6d078d4acc ("fix compat truncate/ftruncate")
Reviewed-by: Christian Brauner <brauner@kernel.org>
Cc: stable@vger.kernel.org
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit c329760749b5419769e57cb2be80955d2805f9c9)
[Vegard: fixed conflicts in context]
Signed-off-by: Vegard Nossum <vegard.nossum@oracle.com>
2024-08-08 15:52:22 +00:00
..
2019-08-06 19:05:23 +02:00
2024-05-30 08:58:51 +00:00
2023-11-28 16:45:44 +00:00
2023-09-23 10:47:05 +02:00
2020-03-11 18:02:43 +01:00
2024-08-08 15:52:22 +00:00
2023-01-18 09:26:35 +01:00
2021-12-14 10:16:55 +01:00