diff mbox

eudev: add patch to fix getrandom() system call on ARM64

Message ID 1470301486-1223-1-git-send-email-thomas.petazzoni@free-electrons.com
State Accepted
Headers show

Commit Message

Thomas Petazzoni Aug. 4, 2016, 9:04 a.m. UTC
When the kernel headers in the toolchain don't provide __NR_getrandom,
eudev has a predefined set of values. However, the provided value for
ARM64 is incorrect, and causes a runtime problem on this architecture
when old kernel headers (not providing __NR_getrandom) are used.

This commit adds a patch to eudev to fix this issue.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 ...missing.h-fix-getrandom-system-call-numbe.patch | 64 ++++++++++++++++++++++
 1 file changed, 64 insertions(+)
 create mode 100644 package/eudev/0002-src-shared-missing.h-fix-getrandom-system-call-numbe.patch

Comments

Thomas Petazzoni Aug. 4, 2016, 2:38 p.m. UTC | #1
Hello,

On Thu, 04 Aug 2016 07:31:53 -0700, Kevin Hilman wrote:
> Thomas Petazzoni <thomas.petazzoni@free-electrons.com> writes:
> 
> > When the kernel headers in the toolchain don't provide __NR_getrandom,
> > eudev has a predefined set of values. However, the provided value for
> > ARM64 is incorrect, and causes a runtime problem on this architecture
> > when old kernel headers (not providing __NR_getrandom) are used.
> >
> > This commit adds a patch to eudev to fix this issue.
> >
> > Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>  
> 
> Thanks for the patch, I tested it and the syscall splat goes away.
> 
> Tested-by: Kevin Hilman <khilman@baylibre.com>

Thanks. FWIW, the patch has been submitted upstream:
https://github.com/gentoo/eudev/pull/134.

Thomas
Thomas Petazzoni Aug. 4, 2016, 8:46 p.m. UTC | #2
Hello,

On Thu,  4 Aug 2016 11:04:46 +0200, Thomas Petazzoni wrote:
> When the kernel headers in the toolchain don't provide __NR_getrandom,
> eudev has a predefined set of values. However, the provided value for
> ARM64 is incorrect, and causes a runtime problem on this architecture
> when old kernel headers (not providing __NR_getrandom) are used.
> 
> This commit adds a patch to eudev to fix this issue.
> 
> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
> ---
>  ...missing.h-fix-getrandom-system-call-numbe.patch | 64 ++++++++++++++++++++++
>  1 file changed, 64 insertions(+)
>  create mode 100644 package/eudev/0002-src-shared-missing.h-fix-getrandom-system-call-numbe.patch

Applied to master, thanks.

Thomas
diff mbox

Patch

diff --git a/package/eudev/0002-src-shared-missing.h-fix-getrandom-system-call-numbe.patch b/package/eudev/0002-src-shared-missing.h-fix-getrandom-system-call-numbe.patch
new file mode 100644
index 0000000..5637933
--- /dev/null
+++ b/package/eudev/0002-src-shared-missing.h-fix-getrandom-system-call-numbe.patch
@@ -0,0 +1,64 @@ 
+From f80fe0e68686060e861338cf7b3b32e0637b3e0b Mon Sep 17 00:00:00 2001
+From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+Date: Thu, 4 Aug 2016 10:13:09 +0200
+Subject: [PATCH] src/shared/missing.h: fix getrandom system call number on
+ ARM64
+
+The getrandom() system call number is indeed 384 on ARM, but it is not
+the same on ARM64. ARM64 uses the asm-generic headers, including for
+system call numbers, so the getrandom() system call number on ARM64 is
+278. This fixes runtime issues of eudev on ARM64, such as:
+
+Populating /dev using udev: [    6.186817] udevd[1204]: starting version 3.1.5
+[    6.191662] udevd[1204]: syscall 384
+[    6.195217] Code: aa0503e4 aa0603e5 aa0703e6 d4000001 (b13ffc1f)
+[    6.201291] CPU: 4 PID: 1204 Comm: udevd Not tainted 4.7.0+ #1
+[    6.207079] Hardware name: ARM Juno development board (r2) (DT)
+[    6.212954] task: ffff800976421900 task.stack: ffff800975610000
+[    6.218825] PC is at 0xffff97f12234
+[    6.222281] LR is at 0x41b15c
+[    6.225214] pc : [<0000ffff97f12234>] lr : [<000000000041b15c>] pstate: 80000000
+[    6.232544] sp : 0000ffffcf9b3870
+[    6.235828] x29: 0000ffffcf9b3870 x28: 0000000000428218
+[    6.241110] x27: 0000000000000000 x26: 000000000042a7e3
+[    6.246395] x25: 0000ffffcf9b39c8 x24: 0000000000428000
+[    6.251670] x23: 0000000000449000 x22: 0000000000449678
+[    6.256946] x21: 0000000000000010 x20: 0000000000449000
+[    6.262233] x19: 0000000000449678 x18: 0000000000000000
+[    6.267507] x17: 0000ffff97f12210 x16: 0000000000449440
+[    6.272779] x15: 0000ffff97e4f730 x14: 0000ffff98050cb8
+[    6.278060] x13: 000000000000033c x12: 00000000000004b4
+[    6.283331] x11: 0000000000000000 x10: 0101010101010101
+[    6.288604] x9 : 0000000000001010 x8 : 0000000000000180
+[    6.293882] x7 : ffffffffffffffff x6 : ffffffffffffffff
+[    6.299154] x5 : 00000000271e36c0 x4 : 0007061c00190d07
+[    6.304426] x3 : 00000000271e36d0 x2 : 0000000000000001
+[    6.309705] x1 : 0000000000000010 x0 : 0000000000449678
+[    6.314976]
+[    6.398734] sky2 0000:08:00.0 enp8s0: renamed from eth0
+
+Reported-by: Kevin Hilman <khilman@baylibre.com>
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+---
+ src/shared/missing.h | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/src/shared/missing.h b/src/shared/missing.h
+index 9031119..5ad5997 100644
+--- a/src/shared/missing.h
++++ b/src/shared/missing.h
+@@ -47,8 +47,10 @@
+ #    define __NR_getrandom 318
+ #  elif defined(__i386__)
+ #    define __NR_getrandom 355
+-#  elif defined(__arm__) || defined(__aarch64__)
++#  elif defined(__arm__)
+ #    define __NR_getrandom 384
++#  elif defined(__aarch64__)
++#    define __NR_getrandom 278
+ #  elif defined(__ia64__)
+ #    define __NR_getrandom 1339
+ #  elif defined(__m68k__)
+-- 
+2.7.4
+