Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

selftests: mm: fix build errors on armhf

The __NR_mmap isn't found on armhf. The mmap() is commonly available
system call and its wrapper is present on all architectures. So it should
be used directly. It solves problem for armhf and doesn't create problem
for other architectures.

Remove sys_mmap() functions as they aren't doing anything else other than
calling mmap(). There is no need to set errno = 0 manually as glibc
always resets it.

For reference errors are as following:

CC seal_elf
seal_elf.c: In function 'sys_mmap':
seal_elf.c:39:33: error: '__NR_mmap' undeclared (first use in this function)
39 | sret = (void *) syscall(__NR_mmap, addr, len, prot,
| ^~~~~~~~~

mseal_test.c: In function 'sys_mmap':
mseal_test.c:90:33: error: '__NR_mmap' undeclared (first use in this function)
90 | sret = (void *) syscall(__NR_mmap, addr, len, prot,
| ^~~~~~~~~

Link: https://lkml.kernel.org/r/20240809082511.497266-1-usama.anjum@collabora.com
Fixes: 4926c7a52de7 ("selftest mm/mseal memory sealing")
Signed-off-by: Muhammad Usama Anjum <usama.anjum@collabora.com>
Cc: Jeff Xu <jeffxu@chromium.org>
Cc: Kees Cook <kees@kernel.org>
Cc: Liam R. Howlett <Liam.Howlett@oracle.com>
Cc: Shuah Khan <shuah@kernel.org>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>

authored by

Muhammad Usama Anjum and committed by
Andrew Morton
b808f629 431c1646

+14 -36
+13 -24
tools/testing/selftests/mm/mseal_test.c
··· 81 81 return sret; 82 82 } 83 83 84 - static void *sys_mmap(void *addr, unsigned long len, unsigned long prot, 85 - unsigned long flags, unsigned long fd, unsigned long offset) 86 - { 87 - void *sret; 88 - 89 - errno = 0; 90 - sret = (void *) syscall(__NR_mmap, addr, len, prot, 91 - flags, fd, offset); 92 - return sret; 93 - } 94 - 95 84 static int sys_munmap(void *ptr, size_t size) 96 85 { 97 86 int sret; ··· 161 172 { 162 173 void *ptr; 163 174 164 - ptr = sys_mmap(NULL, size, PROT_READ, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0); 175 + ptr = mmap(NULL, size, PROT_READ, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0); 165 176 *ptrOut = ptr; 166 177 } 167 178 ··· 170 181 void *ptr; 171 182 unsigned long mapflags = MAP_ANONYMOUS | MAP_PRIVATE; 172 183 173 - ptr = sys_mmap(NULL, size, PROT_READ | PROT_WRITE, mapflags, -1, 0); 184 + ptr = mmap(NULL, size, PROT_READ | PROT_WRITE, mapflags, -1, 0); 174 185 *ptrOut = ptr; 175 186 } 176 187 ··· 194 205 void *ptr; 195 206 unsigned long page_size = getpagesize(); 196 207 197 - ptr = sys_mmap(NULL, page_size, PROT_READ, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0); 208 + ptr = mmap(NULL, page_size, PROT_READ, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0); 198 209 if (ptr == (void *) -1) 199 210 return false; 200 211 ··· 470 481 int prot; 471 482 472 483 /* use mmap to change protection. */ 473 - ptr = sys_mmap(0, size, PROT_NONE, 474 - MAP_ANONYMOUS | MAP_PRIVATE | MAP_FIXED, -1, 0); 484 + ptr = mmap(0, size, PROT_NONE, 485 + MAP_ANONYMOUS | MAP_PRIVATE | MAP_FIXED, -1, 0); 475 486 FAIL_TEST_IF_FALSE(ptr == 0); 476 487 477 488 size = get_vma_size(ptr, &prot); ··· 1198 1209 } 1199 1210 1200 1211 /* use mmap to change protection. */ 1201 - ret2 = sys_mmap(ptr, size, PROT_NONE, 1202 - MAP_ANONYMOUS | MAP_PRIVATE | MAP_FIXED, -1, 0); 1212 + ret2 = mmap(ptr, size, PROT_NONE, 1213 + MAP_ANONYMOUS | MAP_PRIVATE | MAP_FIXED, -1, 0); 1203 1214 if (seal) { 1204 1215 FAIL_TEST_IF_FALSE(ret2 == MAP_FAILED); 1205 1216 FAIL_TEST_IF_FALSE(errno == EPERM); ··· 1229 1240 } 1230 1241 1231 1242 /* use mmap to expand. */ 1232 - ret2 = sys_mmap(ptr, size, PROT_READ, 1233 - MAP_ANONYMOUS | MAP_PRIVATE | MAP_FIXED, -1, 0); 1243 + ret2 = mmap(ptr, size, PROT_READ, 1244 + MAP_ANONYMOUS | MAP_PRIVATE | MAP_FIXED, -1, 0); 1234 1245 if (seal) { 1235 1246 FAIL_TEST_IF_FALSE(ret2 == MAP_FAILED); 1236 1247 FAIL_TEST_IF_FALSE(errno == EPERM); ··· 1257 1268 } 1258 1269 1259 1270 /* use mmap to shrink. */ 1260 - ret2 = sys_mmap(ptr, 8 * page_size, PROT_READ, 1261 - MAP_ANONYMOUS | MAP_PRIVATE | MAP_FIXED, -1, 0); 1271 + ret2 = mmap(ptr, 8 * page_size, PROT_READ, 1272 + MAP_ANONYMOUS | MAP_PRIVATE | MAP_FIXED, -1, 0); 1262 1273 if (seal) { 1263 1274 FAIL_TEST_IF_FALSE(ret2 == MAP_FAILED); 1264 1275 FAIL_TEST_IF_FALSE(errno == EPERM); ··· 1639 1650 ret = fallocate(fd, 0, 0, size); 1640 1651 FAIL_TEST_IF_FALSE(!ret); 1641 1652 1642 - ptr = sys_mmap(NULL, size, PROT_READ, mapflags, fd, 0); 1653 + ptr = mmap(NULL, size, PROT_READ, mapflags, fd, 0); 1643 1654 FAIL_TEST_IF_FALSE(ptr != MAP_FAILED); 1644 1655 1645 1656 if (seal) { ··· 1669 1680 int ret; 1670 1681 unsigned long mapflags = MAP_ANONYMOUS | MAP_SHARED; 1671 1682 1672 - ptr = sys_mmap(NULL, size, PROT_READ, mapflags, -1, 0); 1683 + ptr = mmap(NULL, size, PROT_READ, mapflags, -1, 0); 1673 1684 FAIL_TEST_IF_FALSE(ptr != (void *)-1); 1674 1685 1675 1686 if (seal) {
+1 -12
tools/testing/selftests/mm/seal_elf.c
··· 30 30 return sret; 31 31 } 32 32 33 - static void *sys_mmap(void *addr, unsigned long len, unsigned long prot, 34 - unsigned long flags, unsigned long fd, unsigned long offset) 35 - { 36 - void *sret; 37 - 38 - errno = 0; 39 - sret = (void *) syscall(__NR_mmap, addr, len, prot, 40 - flags, fd, offset); 41 - return sret; 42 - } 43 - 44 33 static inline int sys_mprotect(void *ptr, size_t size, unsigned long prot) 45 34 { 46 35 int sret; ··· 45 56 void *ptr; 46 57 unsigned long page_size = getpagesize(); 47 58 48 - ptr = sys_mmap(NULL, page_size, PROT_READ, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0); 59 + ptr = mmap(NULL, page_size, PROT_READ, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0); 49 60 if (ptr == (void *) -1) 50 61 return false; 51 62