aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcus Shawcroft <marcus.shawcroft@linaro.org>2013-05-12 18:09:33 +0100
committerMarcus Shawcroft <marcus.shawcroft@linaro.org>2013-05-12 18:09:33 +0100
commitd842b1440dc2adc84387b460d4ed536042dd7322 (patch)
treea98ecf4718b46aa5fa374ffeeaf8f2b184541041
parent601a3a5fd5d2ae7ddef9fb8d742bdef512a7dd0f (diff)
downloadglibc-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.aarch648
-rw-r--r--ports/sysdeps/unix/sysv/linux/aarch64/clone.S3
-rw-r--r--ports/sysdeps/unix/sysv/linux/aarch64/ioctl.S4
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)