Hi Waldemar,

On 10/24/23 10:24, Pavel Kozlov wrote:
Hi Waldemar,

On 10/17/23 12:01, Pavel Kozlov wrote:
From: Pavel Kozlov <pavel.koz...@synopsys.com>

Commit 95e38b37 ("add support for systems without legacy setrlimit/getrlimit
syscalls") has added use of the prlimit64 syscall in getrlimit and setrlimit
functions. This change causes memory corruption on getrlimit call for 32-bit
CPUs like ARC, as ARC doesn't have ugetrlimit syscall and uses prlimit64.
Also, setrlimit has been broken by prlimit64 call on 32-bit CPUs like, i386,
ARM, ARC.
Oopsy! Sorry about that, indeed I guess I broke 32 bit CPUs.

I've started a CI job to test your patch to see if it breaks our arch, I'll
keep the list informed on whether this works or not.

Thanks a lot!
Any news from your side?

I have some issues with my CI but it passed basic tests so let's go

I can also say that openrisc shell does not start either with current uClibc-ng master branch, I guess it's because of the same issue.

Tested-by: Yann Sionneau <ysionn...@kalrayinc.com>

@pavel: Do you have a test application showing the memory corruption
for 32 Bit CPU's which could be added to the uclibc-ng-testsuite?
No, I don't have a test to reproduce memory corruption. In my configuration for 
ARC
CPU this issue prevented the shell start. The sell crashed while polling input
(in poll() function).  Actually, it was a fault in return from getdtablesize() 
function
(called inside poll function). This function calls getlimit(), but prlimit64 
syscall corrupted
the stack and overwrote the return address. As a result I got:
---
  zebu_hs login: root
  # potentially unexpected fatal signal 11.
  Path: /bin/busybox
  CPU: 0 PID: 75 Comm: sh Not tainted 5.16.0 #11
  Insn could not be fetched
     @No matching VMA found
ECR: 0x00040000 EFA: 0x00001000 ERET: 0x00001000
STAT: 0x80081a82 [IE U     ]   BTA: 0x20021360
  SP: 0x5fe0baf4  FP: 0x5fe0bb18 BLK: 0x1000
LPS: 0x20037500 LPE: 0x20037508 LPC: 0x00000000
r00: 0x00000400 r01: 0x00000007 r02: 0x00000000
r03: 0x5fe0bae8 r04: 0x01010101 r05: 0x00000020
r06: 0x20077380 r07: 0x01010101 r08: 0x00000105
r09: 0x00000a3b r10: 0x7f1c0300 r11: 0x01000415
r12: 0x2001f1fc r13: 0xffffffff r14: 0xffffffff
r15: 0x5fe0bb68 r16: 0x00000001 r17: 0x00000001
r18: 0x5fe0bbc9 r19: 0xffffffff r20: 0x5fe0bb68
r21: 0x5fe0bc24 r22: 0x5fe0bbc8 r23: 0x200722c0
r24: 0x00000400 r25: 0x2000ab68
---
Any test that calls poll() function of can be used to verify this issue on ARC 
CPU. On
other CPUs the consequences of stack corruption may vary.

I just have a small test to ensure that getrlimit/setrlimit/prlimit are working 
as
expected and can read/write limits with a patch, but in functionality it is 
something
like ulimit.

-Pavel







_______________________________________________
devel mailing list -- devel@uclibc-ng.org
To unsubscribe send an email to devel-le...@uclibc-ng.org

Reply via email to