4.9.317-rc1 review
Subsystems (3)
Greg Kroah-Hartman
maintainercover 4.9.317-rc1 review
This is the start of the stable review cycle for the 4.9.317 release. There are 12 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Sun, 05 Jun 2022 17:38:05 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
https://www.kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.9.317-rc1.gz
or in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-4.9.y
and the diffstat can be found below.
thanks,
greg k-h
-------------
Pseudo-Shortlog of commits:
Greg Kroah-Hartman <[email protected]>
Linux 4.9.317-rc1
Liu Jian <[email protected]>
bpf: Enlarge offset check value to INT_MAX in bpf_skb_{load,store}_bytes
Chuck Lever <[email protected]>
NFSD: Fix possible sleep during nfsd4_release_lockowner()
Xiu Jianfeng <[email protected]>
tpm: ibmvtpm: Correct the return value in tpm_ibmvtpm_probe()
Sarthak Kukreti <[email protected]>
dm verity: set DM_TARGET_IMMUTABLE feature flag
Mikulas Patocka <[email protected]>
dm stats: add cond_resched when looping over entries
Mikulas Patocka <[email protected]>
dm crypt: make printing of the key constant-time
Kees Cook <[email protected]>
exec: Force single empty string when argv is empty
Haimin Zhang <[email protected]>
block-map: add __GFP_ZERO flag for alloc_page in function bio_copy_kern
Gustavo A. R. Silva <[email protected]>
drm/i915: Fix -Wstringop-overflow warning in call to intel_read_wm_latency()
Stephen Brennan <[email protected]>
assoc_array: Fix BUG_ON during garbage collect
Piyush Malgujar <[email protected]>
drivers: i2c: thunderx: Allow driver to work with ACPI defined TWSI controllers
Thomas Bartschies <[email protected]>
net: af_key: check encryption module availability consistency
-------------
Diffstat:
Makefile | 4 ++-- block/bio.c | 2 +- drivers/char/tpm/tpm_ibmvtpm.c | 1 + drivers/gpu/drm/i915/intel_pm.c | 2 +- drivers/i2c/busses/i2c-thunderx-pcidrv.c | 1 + drivers/md/dm-crypt.c | 15 +++++++++++---- drivers/md/dm-stats.c | 8 ++++++++ drivers/md/dm-verity-target.c | 1 + fs/exec.c | 17 +++++++++++++++++ fs/nfsd/nfs4state.c | 12 ++++-------- lib/assoc_array.c | 8 ++++++++ net/core/filter.c | 4 ++-- net/key/af_key.c | 6 +++--- 13 files changed, 60 insertions(+), 21 deletions(-)
Greg Kroah-Hartman
maintainerPATCH 1/12 net: af_key: check encryption module availability consistency
From: Thomas Bartschies <[email protected]>
[ Upstream commit 015c44d7bff3f44d569716117becd570c179ca32 ]
Since the recent introduction supporting the SM3 and SM4 hash algos for IPsec, the kernel produces invalid pfkey acquire messages, when these encryption modules are disabled. This happens because the availability of the algos wasn't checked in all necessary functions. This patch adds these checks.
--- net/key/af_key.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
net/key/af_key.c +3 -3
@@ -2935,7 +2935,7 @@ static int count_ah_combs(const struct xfrm_tmpl *t)break ;if (!aalg->pfkey_supported)continue ; -if (aalg_tmpl_set (t, aalg)) +if (aalg_tmpl_set (t, aalg) && aalg->available) sz +=sizeof (struct sadb_comb ); }return sz +sizeof (struct sadb_prop );
@@ -2953,7 +2953,7 @@ static int count_esp_combs(const struct xfrm_tmpl *t)if (!ealg->pfkey_supported)continue ; -if (!(ealg_tmpl_set (t, ealg))) +if (!(ealg_tmpl_set (t, ealg) && ealg->available))continue ;for (k =1 ; ; k++) {
@@ -2964,7 +2964,7 @@ static int count_esp_combs(const struct xfrm_tmpl *t)if (!aalg->pfkey_supported)continue ; -if (aalg_tmpl_set (t, aalg)) +if (aalg_tmpl_set (t, aalg) && aalg->available) sz +=sizeof (struct sadb_comb ); } }
Signature · 1 line
2.35.1
Greg Kroah-Hartman
maintainerPATCH 2/12 drivers: i2c: thunderx: Allow driver to work with ACPI defined TWSI controllers
In reply to Greg Kroah-HartmanFrom: Piyush Malgujar <[email protected]>
[ Upstream commit 03a35bc856ddc09f2cc1f4701adecfbf3b464cb3 ]
Due to i2c->adap.dev.fwnode not being set, ACPI_COMPANION() wasn't properly found for TWSI controllers.
--- drivers/i2c/busses/i2c-thunderx-pcidrv.c | 1 + 1 file changed, 1 insertion(+)
drivers/i2c/busses/i2c-thunderx-pcidrv.c +1 -0
@@ -208,6 +208,7 @@ static int thunder_i2c_probe_pci(struct pci_dev *pdev, i2c->adap.bus_recovery_info = &octeon_i2c_recovery_info; i2c->adap.dev.parent = dev; i2c->adap.dev.of_node = pdev->dev.of_node; + i2c->adap.dev.fwnode = dev->fwnode;snprintf (i2c->adap.name,sizeof (i2c->adap.name),"Cavium ThunderX i2c adapter at %s" ,dev_name (dev));i2c_set_adapdata (&i2c->adap, i2c);
Signature · 1 line
2.35.1
Greg Kroah-Hartman
maintainerPATCH 3/12 assoc_array: Fix BUG_ON during garbage collect
In reply to Greg Kroah-HartmanFrom: Stephen Brennan <[email protected]>
commit d1dc87763f406d4e67caf16dbe438a5647692395 upstream.
A rare BUG_ON triggered in assoc_array_gc:
[3430308.818153] kernel BUG at lib/assoc_array.c:1609!
Which corresponded to the statement currently at line 1593 upstream:
BUG_ON(assoc_array_ptr_is_meta(p));
Using the data from the core dump, I was able to generate a userspace reproducer[1] and determine the cause of the bug.
[1]: https://github.com/brenns10/kernel_stuff/tree/master/assoc_array_gc
After running the iterator on the entire branch, an internal tree node looked like the following:
NODE (nr_leaves_on_branch: 3)
SLOT [0] NODE (2 leaves)
SLOT [1] NODE (1 leaf)
SLOT [2..f] NODE (empty)
In the userspace reproducer, the pr_devel output when compressing this node was:
-- compress node 0x5607cc089380 --
free=0, leaves=0
[0] retain node 2/1 [nx 0]
[1] fold node 1/1 [nx 0]
[2] fold node 0/1 [nx 2]
[3] fold node 0/2 [nx 2]
[4] fold node 0/3 [nx 2]
[5] fold node 0/4 [nx 2]
[6] fold node 0/5 [nx 2]
[7] fold node 0/6 [nx 2]
[8] fold node 0/7 [nx 2]
[9] fold node 0/8 [nx 2]
[10] fold node 0/9 [nx 2]
[11] fold node 0/10 [nx 2]
[12] fold node 0/11 [nx 2]
[13] fold node 0/12 [nx 2]
[14] fold node 0/13 [nx 2]
[15] fold node 0/14 [nx 2]
after: 3At slot 0, an internal node with 2 leaves could not be folded into the node, because there was only one available slot (slot 0). Thus, the internal node was retained. At slot 1, the node had one leaf, and was able to be folded in successfully. The remaining nodes had no leaves, and so were removed. By the end of the compression stage, there were 14 free slots, and only 3 leaf nodes. The tree was ascended and then its parent node was compressed. When this node was seen, it could not be folded, due to the internal node it contained.
The invariant for compression in this function is: whenever nr_leaves_on_branch < ASSOC_ARRAY_FAN_OUT, the node should contain all leaf nodes. The compression step currently cannot guarantee this, given the corner case shown above.
To fix this issue, retry compression whenever we have retained a node, and yet nr_leaves_on_branch < ASSOC_ARRAY_FAN_OUT. This second compression will then allow the node in slot 1 to be folded in, satisfying the invariant. Below is the output of the reproducer once the fix is applied:
-- compress node 0x560e9c562380 --
free=0, leaves=0
[0] retain node 2/1 [nx 0]
[1] fold node 1/1 [nx 0]
[2] fold node 0/1 [nx 2]
[3] fold node 0/2 [nx 2]
[4] fold node 0/3 [nx 2]
[5] fold node 0/4 [nx 2]
[6] fold node 0/5 [nx 2]
[7] fold node 0/6 [nx 2]
[8] fold node 0/7 [nx 2]
[9] fold node 0/8 [nx 2]
[10] fold node 0/9 [nx 2]
[11] fold node 0/10 [nx 2]
[12] fold node 0/11 [nx 2]
[13] fold node 0/12 [nx 2]
[14] fold node 0/13 [nx 2]
[15] fold node 0/14 [nx 2]
internal nodes remain despite enough space, retrying
-- compress node 0x560e9c562380 --
free=14, leaves=1
[0] fold node 2/15 [nx 0]
after: 3Changes
=======
DH:
- Use false instead of 0.
- Reorder the inserted lines in a couple of places to put retained before next_slot.
ver #2)
- Fix typo in pr_devel, correct comparison to "<="
--- lib/assoc_array.c | 8 ++++++++ 1 file changed, 8 insertions(+)
lib/assoc_array.c +8 -0
@@ -1478,6 +1478,7 @@ int assoc_array_gc(struct assoc_array *astruct assoc_array_ptr *cursor, *ptr;struct assoc_array_ptr *new_root, *new_parent, **new_ptr_pp;unsigned long nr_leaves_on_tree; +bool retained;int keylen, slot, nr_free, next_slot, i;pr_devel ("-->%s()\n" , __func__);
@@ -1554,6 +1555,7 @@ continue_node: goto descend; } +retry_compress:pr_devel ("-- compress node %p --\n" , new_n);/* Count up the number of empty slots in this node and work out the
@@ -1571,6 +1573,7 @@ continue_node:pr_devel ("free=%d, leaves=%lu\n" , nr_free, new_n->nr_leaves_on_branch);/* See what we can fold in */ + retained = false; next_slot =0 ;for (slot =0 ; slot <ASSOC_ARRAY_FAN_OUT ; slot++) {struct assoc_array_shortcut *s;
@@ -1620,9 +1623,14 @@ continue_node:pr_devel ("[%d] retain node %lu/%d [nx %d]\n" , slot, child->nr_leaves_on_branch, nr_free +1 , next_slot); + retained = true; } } +if (retained && new_n->nr_leaves_on_branch <=ASSOC_ARRAY_FAN_OUT ) { +pr_devel ("internal nodes remain despite enough space, retrying\n" ); + goto retry_compress; + }pr_devel ("after: %lu\n" , new_n->nr_leaves_on_branch); nr_leaves_on_tree = new_n->nr_leaves_on_branch;
Greg Kroah-Hartman
maintainerPATCH 4/12 drm/i915: Fix -Wstringop-overflow warning in call to intel_read_wm_latency()
In reply to Greg Kroah-HartmanFrom: Gustavo A. R. Silva <[email protected]>
commit 336feb502a715909a8136eb6a62a83d7268a353b upstream.
Fix the following -Wstringop-overflow warnings when building with GCC-11:
drivers/gpu/drm/i915/intel_pm.c:3106:9: warning: ‘intel_read_wm_latency’ accessing 16 bytes in a region of size 10 [-Wstringop-overflow=]
3106 | intel_read_wm_latency(dev_priv, dev_priv->wm.pri_latency);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/gpu/drm/i915/intel_pm.c:3106:9: note: referencing argument 2 of type ‘u16 *’ {aka ‘short unsigned int *’}
drivers/gpu/drm/i915/intel_pm.c:2861:13: note: in a call to function ‘intel_read_wm_latency’
2861 | static void intel_read_wm_latency(struct drm_i915_private *dev_priv,
| ^~~~~~~~~~~~~~~~~~~~~by removing the over-specified array size from the argument declarations.
It seems that this code is actually safe because the size of the array depends on the hardware generation, and the function checks for that.
Notice that wm can be an array of 5 elements:drivers/gpu/drm/i915/intel_pm.c:3109: intel_read_wm_latency(dev_priv, dev_priv->wm.pri_latency);
or an array of 8 elements:drivers/gpu/drm/i915/intel_pm.c:3131: intel_read_wm_latency(dev_priv, dev_priv->wm.skl_latency);
and the compiler legitimately complains about that.
This helps with the ongoing efforts to globally enable -Wstringop-overflow.
--- drivers/gpu/drm/i915/intel_pm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/gpu/drm/i915/intel_pm.c +1 -1
@@ -2083,7 +2083,7 @@ hsw_compute_linetime_wm(const struct intPIPE_WM_LINETIME_TIME (linetime); } -static void intel_read_wm_latency (struct drm_device *dev,uint16_t wm[8 ]) +static void intel_read_wm_latency (struct drm_device *dev,uint16_t wm[]) {struct drm_i915_private *dev_priv =to_i915 (dev);
Greg Kroah-Hartman
maintainerPATCH 5/12 block-map: add __GFP_ZERO flag for alloc_page in function bio_copy_kern
In reply to Greg Kroah-HartmanFrom: Haimin Zhang <[email protected]>
commit cc8f7fe1f5eab010191aa4570f27641876fa1267 upstream.
Add __GFP_ZERO flag for alloc_page in function bio_copy_kern to initialize the buffer of a bio.
--- block/bio.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
block/bio.c +1 -1
@@ -1538,7 +1538,7 @@ struct bio *bio_copy_kern(struct requestif (bytes > len) bytes = len; - page =alloc_page (q->bounce_gfp | gfp_mask); + page =alloc_page (q->bounce_gfp | __GFP_ZERO | gfp_mask);if (!page) goto cleanup;
Greg Kroah-Hartman
maintainerPATCH 6/12 exec: Force single empty string when argv is empty
In reply to Greg Kroah-HartmanFrom: Kees Cook <[email protected]>
commit dcd46d897adb70d63e025f175a00a89797d31a43 upstream.
Quoting[1] Ariadne Conill:
"In several other operating systems, it is a hard requirement that the second argument to execve(2) be the name of a program, thus prohibiting a scenario where argc < 1. POSIX 2017 also recommends this behaviour, but it is not an explicit requirement[2]:
The argument arg0 should point to a filename string that is associated with the process being started by one of the exec functions.
...
Interestingly, Michael Kerrisk opened an issue about this in 2008[3], but there was no consensus to support fixing this issue then. Hopefully now that CVE-2021-4034 shows practical exploitative use[4] of this bug in a shellcode, we can reconsider.
This issue is being tracked in the KSPP issue tracker[5]."
While the initial code searches[6][7] turned up what appeared to be mostly corner case tests, trying to that just reject argv == NULL (or an immediately terminated pointer list) quickly started tripping[8] existing userspace programs.
The next best approach is forcing a single empty string into argv and adjusting argc to match. The number of programs depending on argc == 0 seems a smaller set than those calling execve with a NULL argv.
Account for the additional stack space in bprm_stack_limits(). Inject an empty string when argc == 0 (and set argc = 1). Warn about the case so userspace has some notice about the change:
process './argc0' launched './argc0' with NULL argv: empty string added
Additionally WARN() and reject NULL argv usage for kernel threads.
[1] https://lore.kernel.org/lkml/[email protected]/
[2] https://pubs.opengroup.org/onlinepubs/9699919799/functions/exec.html
[3] https://bugzilla.kernel.org/show_bug.cgi?id=8408
[4] https://www.qualys.com/2022/01/25/cve-2021-4034/pwnkit.txt
[5] https://github.com/KSPP/linux/issues/176
[6] https://codesearch.debian.net/search?q=execve%5C+*%5C%28%5B%5E%2C%5D%2B%2C+*NULL&literal=0
[7] https://codesearch.debian.net/search?q=execlp%3F%5Cs*%5C%28%5B%5E%2C%5D%2B%2C%5Cs*NULL&literal=0
[8] https://lore.kernel.org/lkml/20220131144352.GE16385@xsang-OptiPlex-9020/
[vegard: fixed conflicts due to missing
886d7de631da71e30909980fdbf318f7caade262^- and
3950e975431bc914f7e81b8f2a2dbdf2064acb0f^- and
655c16a8ce9c15842547f40ce23fd148aeccc074]
--- fs/exec.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+)
This has been tested in both argc == 0 and argc >= 1 cases, but I would still appreciate a review given the differences with mainline. If it's considered too risky I'm also fine with dropping it -- just wanted to make sure this didn't fall through the cracks, as it does block a real (albeit old by now) exploit.
fs/exec.c +17 -0
@@ -1758,6 +1758,9 @@ static int do_execveat_common(int fd, st goto out_unmark; bprm->argc =count (argv,MAX_ARG_STRINGS ); +if (bprm->argc ==0 ) +pr_warn_once ("process '%s' launched '%s' with NULL argv: empty string added\n" , + current->comm, bprm->filename);if ((retval = bprm->argc) <0 ) goto out;
@@ -1782,6 +1785,20 @@ static int do_execveat_common(int fd, stif (retval <0 ) goto out; +/* +* When argv is empty, add an empty string ("") as argv[0] to +* ensure confused userspace programs that start processing +* from argv[1] won't end up walking envp. See also +* bprm_stack_limits(). +*/ +if (bprm->argc ==0 ) { +const char *argv[] = {"" ,NULL }; + retval =copy_strings_kernel (1 , argv, bprm); +if (retval <0 ) + goto out; + bprm->argc =1 ; + } + retval =exec_binprm (bprm);if (retval <0 ) goto out;
Greg Kroah-Hartman
maintainerPATCH 7/12 dm crypt: make printing of the key constant-time
In reply to Greg Kroah-HartmanFrom: Mikulas Patocka <[email protected]>
commit 567dd8f34560fa221a6343729474536aa7ede4fd upstream.
The device mapper dm-crypt target is using scnprintf("%02x", cc->key[i]) to report the current key to userspace. However, this is not a constant-time operation and it may leak information about the key via timing, via cache access patterns or via the branch predictor.
Change dm-crypt's key printing to use "%c" instead of "%02x". Also introduce hex2asc() that carefully avoids any branching or memory accesses when converting a number in the range 0 ... 15 to an ascii character.
--- drivers/md/dm-crypt.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-)
drivers/md/dm-crypt.c +11 -4
@@ -1943,6 +1943,11 @@ static int crypt_map(struct dm_target *treturn DM_MAPIO_SUBMITTED ; } +static char hex2asc (unsigned char c) +{ +return c +'0' + ((unsigned )(9 - c) >>4 &0x27 ); +} +static void crypt_status (struct dm_target *ti,status_type_t type,unsigned status_flags,char *result,unsigned maxlen) {
@@ -1958,10 +1963,12 @@ static void crypt_status(struct dm_targecase STATUSTYPE_TABLE :DMEMIT ("%s " , cc->cipher_string); -if (cc->key_size >0 ) -for (i =0 ; i < cc->key_size; i++) -DMEMIT ("%02x" , cc->key[i]); -else +if (cc->key_size >0 ) { +for (i =0 ; i < cc->key_size; i++) { +DMEMIT ("%c%c" ,hex2asc (cc->key[i] >>4 ), +hex2asc (cc->key[i] &0xf )); + } + }else DMEMIT ("-" ); DMEMIT(" %llu %s %llu", (unsigned long long)cc->iv_offset,
Greg Kroah-Hartman
maintainerPATCH 8/12 dm stats: add cond_resched when looping over entries
In reply to Greg Kroah-HartmanFrom: Mikulas Patocka <[email protected]>
commit bfe2b0146c4d0230b68f5c71a64380ff8d361f8b upstream.
dm-stats can be used with a very large number of entries (it is only limited by 1/4 of total system memory), so add rescheduling points to the loops that iterate over the entries.
--- drivers/md/dm-stats.c | 8 ++++++++ 1 file changed, 8 insertions(+)
drivers/md/dm-stats.c +8 -0
@@ -228,6 +228,7 @@ void dm_stats_cleanup(struct dm_stats *satomic_read (&shared->in_flight[READ ]), atomic_read(&shared->in_flight[WRITE])); } +cond_resched (); }dm_stat_free (&s->rcu_head); }
@@ -316,6 +317,7 @@ static int dm_stats_create(struct dm_stafor (ni =0 ; ni < n_entries; ni++) {atomic_set (&s->stat_shared[ni].in_flight[READ ],0 );atomic_set (&s->stat_shared[ni].in_flight[WRITE ],0 ); +cond_resched (); }if (s->n_histogram_entries) {
@@ -328,6 +330,7 @@ static int dm_stats_create(struct dm_stafor (ni =0 ; ni < n_entries; ni++) { s->stat_shared[ni].tmp.histogram = hi; hi += s->n_histogram_entries +1 ; +cond_resched (); } }
@@ -348,6 +351,7 @@ static int dm_stats_create(struct dm_stafor (ni =0 ; ni < n_entries; ni++) { p[ni].histogram = hi; hi += s->n_histogram_entries +1 ; +cond_resched (); } } }
@@ -477,6 +481,7 @@ static int dm_stats_list(struct dm_stats }DMEMIT ("\n" ); } +cond_resched (); }mutex_unlock (&stats->mutex);
@@ -753,6 +758,7 @@ static void __dm_stat_clear(struct dm_stlocal_irq_enable (); } } +cond_resched (); } }
@@ -868,6 +874,8 @@ static int dm_stats_print(struct dm_statif (unlikely (sz +1 >= maxlen)) goto buffer_overflow; + +cond_resched (); }if (clear)
Greg Kroah-Hartman
maintainerPATCH 9/12 dm verity: set DM_TARGET_IMMUTABLE feature flag
In reply to Greg Kroah-HartmanFrom: Sarthak Kukreti <[email protected]>
commit 4caae58406f8ceb741603eee460d79bacca9b1b5 upstream.
The device-mapper framework provides a mechanism to mark targets as immutable (and hence fail table reloads that try to change the target type). Add the DM_TARGET_IMMUTABLE flag to the dm-verity target's feature flags to prevent switching the verity target with a different target type.
--- drivers/md/dm-verity-target.c | 1 + 1 file changed, 1 insertion(+)
drivers/md/dm-verity-target.c +1 -0
@@ -1056,6 +1056,7 @@ bad:static struct target_type verity_target = { .name ="verity" , + .features =DM_TARGET_IMMUTABLE , .version = {1 ,3 ,0 }, .module =THIS_MODULE , .ctr = verity_ctr,
Greg Kroah-Hartman
maintainerPATCH 10/12 tpm: ibmvtpm: Correct the return value in tpm_ibmvtpm_probe()
In reply to Greg Kroah-HartmanFrom: Xiu Jianfeng <[email protected]>
commit d0dc1a7100f19121f6e7450f9cdda11926aa3838 upstream.
Currently it returns zero when CRQ response timed out, it should return an error code instead.
--- drivers/char/tpm/tpm_ibmvtpm.c | 1 + 1 file changed, 1 insertion(+)
drivers/char/tpm/tpm_ibmvtpm.c +1 -0
@@ -653,6 +653,7 @@ static int tpm_ibmvtpm_probe(struct vio_if (!wait_event_timeout (ibmvtpm->crq_queue.wq, ibmvtpm->rtce_buf !=NULL ,HZ )) { + rc = -ENODEV ;dev_err (dev,"CRQ response timed out\n" ); goto init_irq_cleanup; }
Greg Kroah-Hartman
maintainerPATCH 11/12 NFSD: Fix possible sleep during nfsd4_release_lockowner()
In reply to Greg Kroah-HartmanFrom: Chuck Lever <[email protected]>
commit ce3c4ad7f4ce5db7b4f08a1e237d8dd94b39180b upstream.
nfsd4_release_lockowner() holds clp->cl_lock when it calls check_for_locks(). However, check_for_locks() calls nfsd_file_get() / nfsd_file_put() to access the backing inode's flc_posix list, and nfsd_file_put() can sleep if the inode was recently removed.
Let's instead rely on the stateowner's reference count to gate whether the release is permitted. This should be a reliable indication of locks-in-use since file lock operations and ->lm_get_owner take appropriate references, which are released appropriately when file locks are removed.
--- fs/nfsd/nfs4state.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-)
fs/nfsd/nfs4state.c +4 -8
@@ -6342,16 +6342,12 @@ nfsd4_release_lockowner(struct svc_rqstif (sop->so_is_open_owner || !same_owner_str (sop, owner))continue ; -/* see if there are still any locks associated with it */ - lo =lockowner (sop); -list_for_each_entry (stp, &sop->so_stateids, st_perstateowner) { -if (check_for_locks (stp->st_stid.sc_file, lo)) { - status = nfserr_locks_held; -spin_unlock (&clp->cl_lock); -return status; - } +if (atomic_read (&sop->so_count) !=1 ) { +spin_unlock (&clp->cl_lock); +return nfserr_locks_held; } + lo =lockowner (sop);nfs4_get_stateowner (sop);break ; }
Greg Kroah-Hartman
maintainerPATCH 12/12 bpf: Enlarge offset check value to INT_MAX in bpf_skb_{load,store}_bytes
In reply to Greg Kroah-HartmanFrom: Liu Jian <[email protected]>
commit 45969b4152c1752089351cd6836a42a566d49bcf upstream.
The data length of skb frags + frag_list may be greater than 0xffff, and skb_header_pointer can not handle negative offset. So, here INT_MAX is used to check the validity of offset. Add the same change to the related function skb_store_bytes.
--- net/core/filter.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
net/core/filter.c +2 -2
@@ -1388,7 +1388,7 @@ BPF_CALL_5(bpf_skb_store_bytes, struct sif (unlikely (flags & ~(BPF_F_RECOMPUTE_CSUM |BPF_F_INVALIDATE_HASH )))return -EINVAL ; -if (unlikely (offset >0xffff )) +if (unlikely (offset >INT_MAX ))return -EFAULT ;if (unlikely (bpf_try_make_writable (skb, offset + len)))return -EFAULT ;
@@ -1423,7 +1423,7 @@ BPF_CALL_4(bpf_skb_load_bytes, const str {void *ptr; -if (unlikely (offset >0xffff )) +if (unlikely (offset >INT_MAX )) goto err_clear; ptr =skb_header_pointer (skb, offset, len, to);
Quoted 10 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.9.317 release. There are 12 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Sun, 05 Jun 2022 17:38:05 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.9.317-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-4.9.y
and the diffstat can be found below.thanks,
greg k-h
Results from Linaro’s test farm.
No regressions on arm64, arm, x86_64, and i386.
## Build
* kernel: 4.9.317-rc1
* git: https://gitlab.com/Linaro/lkft/mirrors/stable/linux-stable-rc
* git branch: linux-4.9.y
* git commit: d4fe7e19de86bdff48c8a88cd134353f1b08b566
* git describe: v4.9.316-13-gd4fe7e19de86
* test details:
https://qa-reports.linaro.org/lkft/linux-stable-rc-linux-4.9.y/build/v4.9.316-13-gd4fe7e19de86
## Test Regressions (compared to v4.9.316)
No test regressions found.
## Metric Regressions (compared to v4.9.316)
No metric regressions found.
## Test Fixes (compared to v4.9.316)
No test fixes found.
## Metric Fixes (compared to v4.9.316)
No metric fixes found.
## Test result summary
total: 107072, pass: 94088, fail: 132, skip: 11460, xfail: 1392
## Build Summary
* arc: 10 total, 10 passed, 0 failed
* arm: 261 total, 255 passed, 6 failed
* arm64: 50 total, 39 passed, 11 failed
* i386: 27 total, 23 passed, 4 failed
* mips: 22 total, 22 passed, 0 failed
* parisc: 12 total, 0 passed, 12 failed
* powerpc: 36 total, 16 passed, 20 failed
* s390: 12 total, 9 passed, 3 failed
* sh: 24 total, 24 passed, 0 failed
* sparc: 12 total, 12 passed, 0 failed
* x86_64: 46 total, 44 passed, 2 failed
## Test suites summary
* fwts
* igt-gpu-tools
* kunit
* kvm-unit-tests
* libhugetlbfs
* log-parser-boot
* log-parser-test
* ltp-cap_bounds
* ltp-cap_bounds-tests
* ltp-commands-tests
* ltp-containers
* ltp-containers-tests
* ltp-controllers-tests
* ltp-cpuhotplug-tests
* ltp-crypto-tests
* ltp-cve-tests
* ltp-dio-tests
* ltp-fcntl-locktests
* ltp-fcntl-locktests-tests
* ltp-filecaps
* ltp-filecaps-tests
* ltp-fs
* ltp-fs-tests
* ltp-fs_bind
* ltp-fs_bind-tests
* ltp-fs_perms_simple
* ltp-fs_perms_simple-tests
* ltp-fsx
* ltp-fsx-tests
* ltp-hugetlb
* ltp-hugetlb-tests
* ltp-io
* ltp-io-tests
* ltp-ipc
* ltp-ipc-tests
* ltp-math-tests
* ltp-mm-tests
* ltp-nptl
* ltp-nptl-tests
* ltp-open-posix-tests
* ltp-pty
* ltp-pty-tests
* ltp-sched
* ltp-sched-tests
* ltp-securebits
* ltp-securebits-tests
* ltp-syscalls-tests
* ltp-tracing-tests
* network-basic-tests
* packetdrill
* rcutorture
* ssuite
* v4l2-compliance
* vdso
--
Linaro LKFT
https://lkft.linaro.org
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.9.317 release. There are 12 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Sun, 05 Jun 2022 17:38:05 +0000. Anything received after that time might be too late.
Build results:
total: 163 pass: 163 fail: 0 Qemu test results: total: 397 pass: 397 fail: 0
Guenter
Hi!
Quoted 4 lines
This is the start of the stable review cycle for the 4.9.317 release. There are 12 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
CIP testing did not find any problems here:
https://gitlab.com/cip-project/cip-testing/linux-stable-rc-ci/-/tree/linux-4.9.y
Best regards,
Pavel
Signature · 2 lines
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany