From a5c1b210c9300f09b5c3050d052987eac43afe23 Mon Sep 17 00:00:00 2001 From: Valentin Marinov Date: Fri, 19 Oct 2018 10:39:21 +0300 Subject: [PATCH] linux-sony-amami: Backport getrandom to support libressl on linux < 3.17 --- device/linux-sony-amami/APKBUILD | 6 +- .../downstream-backport-getrandom.patch | 127 ++++++++++++++++++ 2 files changed, 131 insertions(+), 2 deletions(-) create mode 100644 device/linux-sony-amami/downstream-backport-getrandom.patch diff --git a/device/linux-sony-amami/APKBUILD b/device/linux-sony-amami/APKBUILD index 5feb07083..7bb5ac302 100644 --- a/device/linux-sony-amami/APKBUILD +++ b/device/linux-sony-amami/APKBUILD @@ -3,7 +3,7 @@ pkgname="linux-sony-amami" pkgver=3.10.84 -pkgrel=2 +pkgrel=3 pkgdesc="Sony Xperia Z1 Compact kernel fork" arch="armhf" _carch="arm" @@ -26,6 +26,7 @@ source=" $_config gcc7-give-up-on-ilog2-const-optimizations.patch gcc8-fix-put-user.patch + downstream-backport-getrandom.patch " builddir="$srcdir/${_repository}-${_commit}" @@ -64,4 +65,5 @@ package() { sha512sums="fae2299d9d36956be71f40ae724ac0a5069b53d440c114184f82495550c76743e9275e37ad00f6d4a012d32e91a580f424cdb1a1222647c5f2fd678a405a225f linux-sony-amami-2134cafba220b32c43701368413ee333b41b7fe0.tar.gz 0896618a3bb536dc5f8d9932fe704e8f279000207054039bf8df25e89fb9b2d7d70175cbc4af2ee42982ff7af39fd98c41ec5d79d517a36d9ac3fad5344ce615 config-sony-amami.armhf 77eba606a71eafb36c32e9c5fe5e77f5e4746caac292440d9fb720763d766074a964db1c12bc76fe583c5d1a5c864219c59941f5e53adad182dbc70bf2bc14a7 gcc7-give-up-on-ilog2-const-optimizations.patch -00ef6044df2e904289fcbbe268c0200e94b085c374e6126b7f8ff7763285c689bafe9781dc17b85b3684d1d438f3839891925d6ca892ddb6610e68f12e3784a2 gcc8-fix-put-user.patch" +00ef6044df2e904289fcbbe268c0200e94b085c374e6126b7f8ff7763285c689bafe9781dc17b85b3684d1d438f3839891925d6ca892ddb6610e68f12e3784a2 gcc8-fix-put-user.patch +b921570e799682d3ac6bff5dae2c7a69da24cd6988e57605fea0bd039e8b677e8335e11846c51798a5fb15011eaf0495fe6a410833a244319140798d7b70fea1 downstream-backport-getrandom.patch" diff --git a/device/linux-sony-amami/downstream-backport-getrandom.patch b/device/linux-sony-amami/downstream-backport-getrandom.patch new file mode 100644 index 000000000..ba4f5ddd2 --- /dev/null +++ b/device/linux-sony-amami/downstream-backport-getrandom.patch @@ -0,0 +1,127 @@ +diff --git a/arch/arm/include/asm/unistd.h b/arch/arm/include/asm/unistd.h +index 43876245..32640c43 100644 +--- a/arch/arm/include/asm/unistd.h ++++ b/arch/arm/include/asm/unistd.h +@@ -15,7 +15,17 @@ + + #include + +-#define __NR_syscalls (384) ++/* ++ * This may need to be greater than __NR_last_syscall+1 in order to ++ * account for the padding in the syscall table ++ */ ++#define __NR_syscalls (388) ++ ++/* ++ * *NOTE*: This is a ghost syscall private to the kernel. Only the ++ * __kuser_cmpxchg code in entry-armv.S should be aware of its ++ * existence. Don't ever use this from user code. ++ */ + #define __ARM_NR_cmpxchg (__ARM_NR_BASE+0x00fff0) + + #define __ARCH_WANT_STAT64 +diff --git a/arch/arm/include/uapi/asm/unistd.h b/arch/arm/include/uapi/asm/unistd.h +index 86f5789d..ea1f4a74 100644 +--- a/arch/arm/include/uapi/asm/unistd.h ++++ b/arch/arm/include/uapi/asm/unistd.h +@@ -408,15 +408,9 @@ + #define __NR_finit_module (__NR_SYSCALL_BASE+379) + #define __NR_sched_setattr (__NR_SYSCALL_BASE+380) + #define __NR_sched_getattr (__NR_SYSCALL_BASE+381) +-/* Reserve for later + #define __NR_renameat2 (__NR_SYSCALL_BASE+382) +-*/ + #define __NR_seccomp (__NR_SYSCALL_BASE+383) +- +-/* +- * This may need to be greater than __NR_last_syscall+1 in order to +- * account for the padding in the syscall table +- */ ++#define __NR_getrandom (__NR_SYSCALL_BASE+384) + + /* + * The following SWIs are ARM private. +diff --git a/arch/arm/kernel/calls.S b/arch/arm/kernel/calls.S +index b75c9688..7b866d48 100644 +--- a/arch/arm/kernel/calls.S ++++ b/arch/arm/kernel/calls.S +@@ -391,9 +391,9 @@ + CALL(sys_finit_module) + /* 380 */ CALL(sys_sched_setattr) + CALL(sys_sched_getattr) +- CALL(sys_ni_syscall) /* reserved sys_renameat2 */ ++ CALL(sys_ni_syscall) + CALL(sys_seccomp) +- ++ CALL(sys_getrandom) + #ifndef syscalls_counted + .equ syscalls_padding, ((NR_syscalls + 3) & ~3) - NR_syscalls + #define syscalls_counted +diff --git a/arch/x86/syscalls/syscall_32.tbl b/arch/x86/syscalls/syscall_32.tbl +index 531bb142..fc853fb1 100644 +--- a/arch/x86/syscalls/syscall_32.tbl ++++ b/arch/x86/syscalls/syscall_32.tbl +@@ -361,3 +361,4 @@ + 352 i386 sched_getattr sys_sched_getattr + # 353 i386 renameat2 sys_renameat2 + 354 i386 seccomp sys_seccomp ++355 i386 getrandom sys_getrandom +diff --git a/arch/x86/syscalls/syscall_64.tbl b/arch/x86/syscalls/syscall_64.tbl +index 1c7aebc4..c16897e6 100644 +--- a/arch/x86/syscalls/syscall_64.tbl ++++ b/arch/x86/syscalls/syscall_64.tbl +@@ -324,6 +324,7 @@ + 315 common sched_getattr sys_sched_getattr + # 316 common renameat2 sys_renameat2 + 317 common seccomp sys_seccomp ++318 common getrandom sys_getrandom + + # + # x32-specific system call numbers start at 512 to avoid cache impact +diff --git a/drivers/char/random.c b/drivers/char/random.c +index b020ebf4..2b58738d 100644 +--- a/drivers/char/random.c ++++ b/drivers/char/random.c +@@ -681,7 +681,7 @@ retry: + r->entropy_total = 0; + if (r == &nonblocking_pool) { + prandom_reseed_late(); +- wake_up_interruptible(&urandom_init_wait); ++ wake_up_all(&urandom_init_wait); + pr_notice("random: %s pool is initialized\n", + r->name); + } +diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h +index a981ef05..46e2889d 100644 +--- a/include/linux/syscalls.h ++++ b/include/linux/syscalls.h +@@ -759,6 +759,9 @@ asmlinkage long sys_linkat(int olddfd, const char __user *oldname, + int newdfd, const char __user *newname, int flags); + asmlinkage long sys_renameat(int olddfd, const char __user * oldname, + int newdfd, const char __user * newname); ++asmlinkage long sys_renameat2(int olddfd, const char __user *oldname, ++ int newdfd, const char __user *newname, ++ unsigned int flags); + asmlinkage long sys_futimesat(int dfd, const char __user *filename, + struct timeval __user *utimes); + asmlinkage long sys_faccessat(int dfd, const char __user *filename, int mode); +diff --git a/include/uapi/linux/random.h b/include/uapi/linux/random.h +index 8ae57842..d5066b6f 100644 +--- a/include/uapi/linux/random.h ++++ b/include/uapi/linux/random.h +@@ -42,6 +42,14 @@ struct rand_pool_info { + + /* Exported functions */ + ++/* ++ * Flags for getrandom(2) ++ * ++ * GRND_NONBLOCK Don't block and return EAGAIN instead ++ * GRND_RANDOM Use the /dev/random pool instead of /dev/urandom ++ */ ++#define GRND_NONBLOCK 0x0001 ++#define GRND_RANDOM 0x0002 + + /* + * Flags for getrandom(2)