diff -Nru openafs-1.8.0~pre5/debian/changelog openafs-1.8.0~pre5/debian/changelog --- openafs-1.8.0~pre5/debian/changelog 2019-09-23 15:49:23.000000000 +0000 +++ openafs-1.8.0~pre5/debian/changelog 2019-11-22 13:29:27.000000000 +0000 @@ -1,3 +1,12 @@ +openafs (1.8.0~pre5-1ubuntu1.2) bionic; urgency=medium + + [ Tyler Hicks ] + * 0005-LINUX-5.3.0-Check-for-recurse-arg-in-keyring_search.patch, + 0006-LINUX-5.3.0-Use-send_sig-instead-of-force_sig.patch: Apply patches + from upstream to fix build failures with the 5.3 kernel (LP: #1837893) + + -- Thadeu Lima de Souza Cascardo Fri, 22 Nov 2019 10:29:27 -0300 + openafs (1.8.0~pre5-1ubuntu1.1) bionic; urgency=medium * Fix build for Linux 5.0 (LP: #1839890) diff -Nru openafs-1.8.0~pre5/debian/patches/0005-LINUX-5.3.0-Check-for-recurse-arg-in-keyring_search.patch openafs-1.8.0~pre5/debian/patches/0005-LINUX-5.3.0-Check-for-recurse-arg-in-keyring_search.patch --- openafs-1.8.0~pre5/debian/patches/0005-LINUX-5.3.0-Check-for-recurse-arg-in-keyring_search.patch 1970-01-01 00:00:00.000000000 +0000 +++ openafs-1.8.0~pre5/debian/patches/0005-LINUX-5.3.0-Check-for-recurse-arg-in-keyring_search.patch 2019-11-22 13:29:27.000000000 +0000 @@ -0,0 +1,80 @@ +From 02d82275c17284d04629282aa374bb39f511c989 Mon Sep 17 00:00:00 2001 +From: Cheyenne Wills +Date: Thu, 8 Aug 2019 16:53:13 -0600 +Subject: [PATCH] LINUX 5.3.0: Check for 'recurse' arg in keyring_search + +Linux 5.3.0 commit dcf49dbc8077e278ddd1bc7298abc781496e8a08 "keys: Add a +'recurse' flag for keyring searches" adds a new parameter to +Linux kernel keyring_search function. + +Update the call to keyring_search to include the recurse parameter if +available. Setting the parameter to true (1) maintains the current +search behavior. + +Change-Id: I54b7ed686bf1fb4c42789e5d251ae76789e9fc88 +Reviewed-on: https://gerrit.openafs.org/13752 +Tested-by: BuildBot +Reviewed-by: Benjamin Kaduk +Reviewed-by: Andrew Deason +--- + src/afs/LINUX/osi_compat.h | 6 ++++++ + src/cf/linux-kernel-assorted.m4 | 1 + + src/cf/linux-test4.m4 | 13 +++++++++++++ + 3 files changed, 20 insertions(+) + +diff --git a/src/afs/LINUX/osi_compat.h b/src/afs/LINUX/osi_compat.h +index abe6b711be00..d236081431d6 100644 +--- a/src/afs/LINUX/osi_compat.h ++++ b/src/afs/LINUX/osi_compat.h +@@ -222,9 +222,15 @@ afs_linux_search_keyring(afs_ucred_t *cred, struct key_type *type) + key_ref_t key_ref; + + if (afs_session_keyring(cred)) { ++# if defined(KEYRING_SEARCH_TAKES_RECURSE) ++ key_ref = keyring_search( ++ make_key_ref(afs_session_keyring(cred), 1), ++ type, "_pag", 1); ++# else + key_ref = keyring_search( + make_key_ref(afs_session_keyring(cred), 1), + type, "_pag"); ++# endif + if (IS_ERR(key_ref)) + return ERR_CAST(key_ref); + +diff --git a/src/cf/linux-kernel-assorted.m4 b/src/cf/linux-kernel-assorted.m4 +index 191b603d1172..6fa6051f8f7a 100644 +--- a/src/cf/linux-kernel-assorted.m4 ++++ b/src/cf/linux-kernel-assorted.m4 +@@ -55,6 +55,7 @@ LINUX_DOP_D_REVALIDATE_TAKES_UNSIGNED + LINUX_IOP_LOOKUP_TAKES_UNSIGNED + LINUX_D_INVALIDATE_IS_VOID + LINUX_KERNEL_READ_OFFSET_IS_LAST ++LINUX_KEYRING_SEARCH_TAKES_RECURSE + ]) + + +diff --git a/src/cf/linux-test4.m4 b/src/cf/linux-test4.m4 +index cf8205675979..f7699cec31ce 100644 +--- a/src/cf/linux-test4.m4 ++++ b/src/cf/linux-test4.m4 +@@ -836,3 +836,16 @@ AC_DEFUN([LINUX_KERNEL_READ_OFFSET_IS_LAST], [ + [define if your kernel_read has offset as the last argument], + []) + ]) ++ ++AC_DEFUN([LINUX_KEYRING_SEARCH_TAKES_RECURSE], [ ++ AC_CHECK_LINUX_BUILD([whether keyring_search has the recurse parameter], ++ [ac_cv_linux_func_keyring_search_takes_recurse], ++ [#include ++ key_ref_t tkey;], ++ [ ++ keyring_search(tkey, NULL, NULL, 0); ++ ], ++ [KEYRING_SEARCH_TAKES_RECURSE], ++ [define if your keyring_search has the recurse parameter], ++ []) ++]) +-- +2.17.1 + diff -Nru openafs-1.8.0~pre5/debian/patches/0006-LINUX-5.3.0-Use-send_sig-instead-of-force_sig.patch openafs-1.8.0~pre5/debian/patches/0006-LINUX-5.3.0-Use-send_sig-instead-of-force_sig.patch --- openafs-1.8.0~pre5/debian/patches/0006-LINUX-5.3.0-Use-send_sig-instead-of-force_sig.patch 1970-01-01 00:00:00.000000000 +0000 +++ openafs-1.8.0~pre5/debian/patches/0006-LINUX-5.3.0-Use-send_sig-instead-of-force_sig.patch 2019-11-22 13:29:27.000000000 +0000 @@ -0,0 +1,117 @@ +From 2b7af1243f46496c0b5973b3fa2a6396243f7613 Mon Sep 17 00:00:00 2001 +From: Cheyenne Wills +Date: Fri, 9 Aug 2019 14:25:03 -0600 +Subject: [PATCH] LINUX 5.3.0: Use send_sig instead of force_sig + +Linux 5.3.0 commit 3cf5d076fb4d48979f382bc9452765bf8b79e740 "signal +Remove task parameter from force_sig" (part of siginfo-linus branch) +changes the parameters for the Linux kernel function force_sig. See LKML +thread starting at https://lkml.org/lkml/2019/5/22/1351 + +According to the LKML discussion and the above commit message force_sig +is only safe to deliver a synchronous signal to the current task. To +send a signal to another task, we're supposed to use send_sig instead, +which has been available since at least linux 2.6.12-rc12. + +Currently, rx_knet calls force_sig to kill the rxk_ListenerTask. With +the Linux 5.3.0 kernel, this module fails to compile due to the above +noted changes. + +Replace the force_sig call with send_sig. In order to use send_sig, the +rxk_listener thread must allow SIGKILL and during shutdown (umount) +SIGKILL must be unblocked for the rxk_listener thread. + +Note that SIGKILL is initially blocked on rxk_listener and is only +unblocked when shutting down the thread. Having the signal blocked is +sufficient to prevent unwanted signals from reaching the rxk_listener +thread during normal operation. + +Change-Id: I0c31d66f4ecd887ff9253ba506565592010e8bcb +Reviewed-on: https://gerrit.openafs.org/13753 +Reviewed-by: Benjamin Kaduk +Tested-by: BuildBot +--- + src/afs/LINUX/osi_misc.c | 11 +++++++++++ + src/afs/afs_osi.c | 3 +++ + src/afs/afs_prototypes.h | 2 +- + src/rx/LINUX/rx_knet.c | 2 +- + src/rx/rx_kcommon.c | 1 + + 5 files changed, 17 insertions(+), 2 deletions(-) + +diff --git a/src/afs/LINUX/osi_misc.c b/src/afs/LINUX/osi_misc.c +index 655076779a03..0e9336db66b0 100644 +--- a/src/afs/LINUX/osi_misc.c ++++ b/src/afs/LINUX/osi_misc.c +@@ -37,6 +37,17 @@ osi_linux_mask(void) + SIG_UNLOCK(current); + } + ++void ++osi_linux_unmaskrxk(void) ++{ ++ extern struct task_struct *rxk_ListenerTask; ++ /* Note this unblocks signals on the rxk_Listener ++ * thread from a thread that is stopping rxk */ ++ SIG_LOCK(rxk_ListenerTask); ++ sigdelset(&rxk_ListenerTask->blocked, SIGKILL); ++ SIG_UNLOCK(rxk_ListenerTask); ++} ++ + /* LOOKUP_POSITIVE is becoming the default */ + #ifndef LOOKUP_POSITIVE + #define LOOKUP_POSITIVE 0 +diff --git a/src/afs/afs_osi.c b/src/afs/afs_osi.c +index 2009d194d4da..c970ea3c1fe0 100644 +--- a/src/afs/afs_osi.c ++++ b/src/afs/afs_osi.c +@@ -138,6 +138,9 @@ afs_osi_MaskSignals(void) + void + afs_osi_UnmaskRxkSignals(void) + { ++#ifdef AFS_LINUX22_ENV ++ osi_linux_unmaskrxk(); ++#endif + } + + /* Two hacks to try and fix afsdb */ +diff --git a/src/afs/afs_prototypes.h b/src/afs/afs_prototypes.h +index d5ecb25463e4..ec28e802bb6d 100644 +--- a/src/afs/afs_prototypes.h ++++ b/src/afs/afs_prototypes.h +@@ -644,7 +644,7 @@ extern int uiomove(char *dp, int length, uio_flag_t rw, struct uio *uiop); + extern void osi_linux_free_inode_pages(void); + #endif + extern void osi_linux_mask(void); +-extern void osi_linux_unmask(void); ++extern void osi_linux_unmaskrxk(void); + extern int setpag(cred_t ** cr, afs_uint32 pagvalue, afs_uint32 * newpag, + int change_parent); + #endif +diff --git a/src/rx/LINUX/rx_knet.c b/src/rx/LINUX/rx_knet.c +index dea64fb38804..9fbb563f36f4 100644 +--- a/src/rx/LINUX/rx_knet.c ++++ b/src/rx/LINUX/rx_knet.c +@@ -272,7 +272,7 @@ osi_StopListener(void) + while (rxk_ListenerTask) { + if (rxk_ListenerTask) { + flush_signals(rxk_ListenerTask); +- force_sig(SIGKILL, rxk_ListenerTask); ++ send_sig(SIGKILL, rxk_ListenerTask, 1); + } + if (!rxk_ListenerTask) + break; +diff --git a/src/rx/rx_kcommon.c b/src/rx/rx_kcommon.c +index 51dcfa9168fd..c2cc187f4628 100644 +--- a/src/rx/rx_kcommon.c ++++ b/src/rx/rx_kcommon.c +@@ -1197,6 +1197,7 @@ rxk_Listener(void) + #ifdef AFS_LINUX20_ENV + rxk_ListenerPid = current->pid; + rxk_ListenerTask = current; ++ allow_signal(SIGKILL); /* Allowed, but blocked until shutdown */ + #endif + #ifdef AFS_SUN5_ENV + rxk_ListenerPid = 1; /* No PID, just a flag that we're alive */ +-- +2.17.1 + diff -Nru openafs-1.8.0~pre5/debian/patches/series openafs-1.8.0~pre5/debian/patches/series --- openafs-1.8.0~pre5/debian/patches/series 2019-09-23 15:49:23.000000000 +0000 +++ openafs-1.8.0~pre5/debian/patches/series 2019-11-22 13:29:27.000000000 +0000 @@ -6,3 +6,5 @@ ubuntu-0004-LINUX-correct-include-for-ktime_get_coarse_real_ts64.patch ubuntu-0005-Linux_5.0-replace-do_gettimeofday-with-ktime_get_rea.patch ubuntu-0006-Linux_5.0-replaced-current_kernel_time-with-ktime_ge.patch +0005-LINUX-5.3.0-Check-for-recurse-arg-in-keyring_search.patch +0006-LINUX-5.3.0-Use-send_sig-instead-of-force_sig.patch