diff options
author | Marcus Shawcroft <marcus.shawcroft@linaro.org> | 2013-05-12 18:09:33 +0100 |
---|---|---|
committer | Marcus Shawcroft <marcus.shawcroft@linaro.org> | 2013-05-12 18:09:33 +0100 |
commit | d842b1440dc2adc84387b460d4ed536042dd7322 (patch) | |
tree | a98ecf4718b46aa5fa374ffeeaf8f2b184541041 | |
parent | 601a3a5fd5d2ae7ddef9fb8d742bdef512a7dd0f (diff) | |
download | glibc-d842b1440dc2adc84387b460d4ed536042dd7322.zip glibc-d842b1440dc2adc84387b460d4ed536042dd7322.tar.gz glibc-d842b1440dc2adc84387b460d4ed536042dd7322.tar.bz2 |
[AArch64] Fix out of range branch from ioctl() and clone()
2013-05-12 Marcus Shawcroft <marcus.shawcroft@linaro.org>
* sysdeps/unix/sysv/linux/aarch64/clone.S (__clone):
Do not call sycall_error directly with a confitional branch.
* sysdeps/unix/sysv/linux/aarch64/ioctl.S (__ioctl):
Do not call sycall_error directly with a confitional branch.
-rw-r--r-- | ports/ChangeLog.aarch64 | 8 | ||||
-rw-r--r-- | ports/sysdeps/unix/sysv/linux/aarch64/clone.S | 3 | ||||
-rw-r--r-- | ports/sysdeps/unix/sysv/linux/aarch64/ioctl.S | 4 |
3 files changed, 11 insertions, 4 deletions
diff --git a/ports/ChangeLog.aarch64 b/ports/ChangeLog.aarch64 index f01388f..a611ac2 100644 --- a/ports/ChangeLog.aarch64 +++ b/ports/ChangeLog.aarch64 @@ -1,3 +1,11 @@ +2013-05-12 Marcus Shawcroft <marcus.shawcroft@linaro.org> + + * sysdeps/unix/sysv/linux/aarch64/clone.S (__clone): + Do not call sycall_error directly with a confitional branch. + + * sysdeps/unix/sysv/linux/aarch64/ioctl.S (__ioctl): + Do not call sycall_error directly with a confitional branch. + 2013-03-19 Andreas Schwab <schwab@suse.de> * sysdeps/unix/sysv/linux/aarch64/configure.in: Set diff --git a/ports/sysdeps/unix/sysv/linux/aarch64/clone.S b/ports/sysdeps/unix/sysv/linux/aarch64/clone.S index 999ecf2..b359e6e 100644 --- a/ports/sysdeps/unix/sysv/linux/aarch64/clone.S +++ b/ports/sysdeps/unix/sysv/linux/aarch64/clone.S @@ -65,9 +65,10 @@ ENTRY(__clone) svc 0x0 cmp x0, #0 beq 2f - blt C_SYMBOL_NAME(__syscall_error) + blt 3f RET 1: mov x0, #-EINVAL +3: b syscall_error 2: diff --git a/ports/sysdeps/unix/sysv/linux/aarch64/ioctl.S b/ports/sysdeps/unix/sysv/linux/aarch64/ioctl.S index b089bb5..2e08cf7 100644 --- a/ports/sysdeps/unix/sysv/linux/aarch64/ioctl.S +++ b/ports/sysdeps/unix/sysv/linux/aarch64/ioctl.S @@ -24,9 +24,7 @@ ENTRY(__ioctl) sxtw x0, w0 svc #0x0 cmn x0, #0x1, lsl #12 - b.hi C_SYMBOL_NAME(__syscall_error) - ret - + PSEUDO_RET PSEUDO_END (__ioctl) weak_alias (__ioctl, ioctl) |