On Linux the mount syscall, depending on flags provided, the source,
type and data my be ignored. We already don't check data and allow
source to be NULL. Normally when type is ignored an application will
provide an empty string "". But sometimes NULL is passed (like for
source). So we now also allow type to be NULL to prevent false
positives.
Adjust the linux/scalar.c tests so the type param is still
unaddressable.
https://bugs.kde.org/show_bug.cgi?id=503914
(cherry picked from commit
ff6e14ab798af0628c54c6a704c1cb8844a79419)
The following bugs have been fixed or resolved on this branch.
503641 close_range syscalls started failing with 3.25.0
+503914 mount syscall param filesystemtype may be NULL
To see details of a given bug, visit
https://bugs.kde.org/show_bug.cgi?id=XXXXXX
{
// Nb: depending on 'flags', the 'type' and 'data' args may be ignored.
// We are conservative and check everything, except the memory pointed to
- // by 'data'.
+ // by 'data'. And since both 'source' and 'type' may be ignored, we allow
+ // them to be NULL.
*flags |= SfMayBlock;
PRINT("sys_mount( %#" FMT_REGWORD "x(%s), %#" FMT_REGWORD "x(%s), %#"
FMT_REGWORD "x(%s), %#" FMT_REGWORD "x, %#" FMT_REGWORD "x )",
if (ARG1)
PRE_MEM_RASCIIZ( "mount(source)", ARG1);
PRE_MEM_RASCIIZ( "mount(target)", ARG2);
- PRE_MEM_RASCIIZ( "mount(type)", ARG3);
+ if (ARG3)
+ PRE_MEM_RASCIIZ( "mount(type)", ARG3);
}
PRE(sys_oldumount)
// __NR_mount 21
GO(__NR_mount, "5s 3m");
- SY(__NR_mount, x0, x0, x0, x0, x0); FAIL;
+ SY(__NR_mount, x0, x0, x0-1, x0, x0); FAIL;
// __NR_umount arm64 only has umount2
//GO(__NR_umount, "1s 1m");
// __NR_mount 21
GO(__NR_mount, "5s 3m");
- SY(__NR_mount, x0, x0, x0, x0, x0); FAIL;
+ SY(__NR_mount, x0, x0, x0-1, x0, x0); FAIL;
// __NR_umount 22
GO(__NR_umount, "1s 1m");