5.8.8-rc1 review
Subsystems (5)
Greg Kroah-Hartman
maintainerPATCH 164/186 drm/amdgpu: Specify get_argument function for ci_smu_funcs
In reply to Greg Kroah-HartmanFrom: Sandeep Raghuraman <[email protected]>
commit f7b2e34b4afb8d712913dc199d3292ea9e078637 upstream.
Starting in Linux 5.8, the graphics and memory clock frequency were not being reported for CIK cards. This is a regression, since they were reported correctly in Linux 5.7.
After investigation, I discovered that the smum_send_msg_to_smc() function, attempts to call the corresponding get_argument() function of ci_smu_funcs. However, the get_argument() function is not defined in ci_smu_funcs.
This patch fixes the bug by specifying the correct get_argument() function.
--- drivers/gpu/drm/amd/powerplay/smumgr/ci_smumgr.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/gpu/drm/amd/powerplay/smumgr/ci_smumgr.c +2 -0
@@ -37,6 +37,7 @@#include "cgs_common.h" #include "atombios.h" #include "pppcielanes.h" +#include "smu7_smumgr.h" #include "smu/smu_7_0_1_d.h" #include "smu/smu_7_0_1_sh_mask.h"
@@ -2948,6 +2949,7 @@ const struct pp_smumgr_func ci_smu_funcs .request_smu_load_specific_fw = NULL, .send_msg_to_smc = ci_send_msg_to_smc, .send_msg_to_smc_with_parameter = ci_send_msg_to_smc_with_parameter, + .get_argument = smu7_get_argument, .download_pptable_settings = NULL, .upload_pptable_settings = NULL, .get_offsetof = ci_get_offsetof,
Greg Kroah-Hartman
maintainerPATCH 165/186 dm writecache: handle DAX to partitions on persistent memory correctly
In reply to Greg Kroah-HartmanFrom: Mikulas Patocka <[email protected]>
commit f9e040efcc28309e5c592f7e79085a9a52e31f58 upstream.
The function dax_direct_access doesn't take partitions into account, it always maps pages from the beginning of the device. Therefore, persistent_memory_claim() must get the partition offset using get_start_sect() and add it to the page offsets passed to dax_direct_access().
--- drivers/md/dm-writecache.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-)
drivers/md/dm-writecache.c +10 -2
@@ -231,6 +231,7 @@ static int persistent_memory_claim(strucpfn_t pfn;int id;struct page **pages; +sector_t offset; wc->memory_vmapped = false;
@@ -245,9 +246,16 @@ static int persistent_memory_claim(struc goto err1; } + offset =get_start_sect (wc->ssd_dev->bdev); +if (offset & (PAGE_SIZE /512 -1 )) { + r = -EINVAL ; + goto err1; + } + offset >>=PAGE_SHIFT -9 ; + id =dax_read_lock (); - da =dax_direct_access (wc->ssd_dev->dax_dev,0 , p, &wc->memory_map, &pfn); + da =dax_direct_access (wc->ssd_dev->dax_dev, offset, p, &wc->memory_map, &pfn);if (da <0 ) { wc->memory_map =NULL ; r = da;
@@ -269,7 +277,7 @@ static int persistent_memory_claim(struc i =0 ; do { long daa; - daa = dax_direct_access(wc->ssd_dev->dax_dev, i, p - i, + daa = dax_direct_access(wc->ssd_dev->dax_dev, offset + i, p - i, NULL, &pfn); if (daa <= 0) { r = daa ? daa : -EINVAL;
Greg Kroah-Hartman
maintainerPATCH 166/186 dm mpath: fix racey management of PG initialization
In reply to Greg Kroah-HartmanFrom: Mike Snitzer <[email protected]>
commit c322ee9320eaa4013ca3620b1130992916b19b31 upstream.
Commit 935fcc56abc3 ("dm mpath: only flush workqueue when needed") changed flush_multipath_work() to avoid needless workqueue flushing (of a multipath global workqueue). But that change didn't realize the surrounding flush_multipath_work() code should also only run if 'pg_init_in_progress' is set.
Fix this by only doing all of flush_multipath_work()'s PG init related work if 'pg_init_in_progress' is set.
Otherwise multipath_wait_for_pg_init_completion() will run unconditionally but the preceeding flush_workqueue(kmpath_handlerd) may not. This could lead to deadlock (though only if kmpath_handlerd never runs a corresponding work to decrement 'pg_init_in_progress').
It could also be, though highly unlikely, that the kmpath_handlerd work that does PG init completes before 'pg_init_in_progress' is set, and then an intervening DM table reload's multipath_postsuspend() triggers flush_multipath_work().
--- drivers/md/dm-mpath.c | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-)
drivers/md/dm-mpath.c +15 -7
@@ -1247,17 +1247,25 @@ static void multipath_wait_for_pg_init_cstatic void flush_multipath_work (struct multipath *m) {if (m->hw_handler_name) { -set_bit (MPATHF_PG_INIT_DISABLED , &m->flags); -smp_mb__after_atomic (); +unsigned long flags; + +if (!atomic_read (&m->pg_init_in_progress)) + goto skip; + +spin_lock_irqsave (&m->lock, flags); +if (atomic_read (&m->pg_init_in_progress) && + !test_and_set_bit (MPATHF_PG_INIT_DISABLED , &m->flags)) { +spin_unlock_irqrestore (&m->lock, flags); -if (atomic_read (&m->pg_init_in_progress))flush_workqueue (kmpath_handlerd); -multipath_wait_for_pg_init_completion (m); +multipath_wait_for_pg_init_completion (m); -clear_bit (MPATHF_PG_INIT_DISABLED , &m->flags); -smp_mb__after_atomic (); +spin_lock_irqsave (&m->lock, flags); +clear_bit (MPATHF_PG_INIT_DISABLED , &m->flags); + } +spin_unlock_irqrestore (&m->lock, flags); } - +skip:if (m->queue_mode ==DM_TYPE_BIO_BASED )flush_work (&m->process_queued_bios);flush_work (&m->trigger_event);
Greg Kroah-Hartman
maintainerPATCH 167/186 dm integrity: fix error reporting in bitmap mode after creation
In reply to Greg Kroah-HartmanFrom: Mikulas Patocka <[email protected]>
commit e27fec66f0a94e35a35548bd0b29ae616e62ec62 upstream.
The dm-integrity target did not report errors in bitmap mode just after creation. The reason is that the function integrity_recalc didn't clean up ic->recalc_bitmap as it proceeded with recalculation.
Fix this by updating the bitmap accordingly -- the double shift serves to rounddown.
--- drivers/md/dm-integrity.c | 12 ++++++++++++ 1 file changed, 12 insertions(+)
drivers/md/dm-integrity.c +12 -0
@@ -2487,6 +2487,7 @@ next_chunk: range.logical_sector =le64_to_cpu (ic->sb->recalc_sector);if (unlikely (range.logical_sector >= ic->provided_data_sectors)) {if (ic->mode =='B' ) { +block_bitmap_op (ic, ic->recalc_bitmap,0 , ic->provided_data_sectors,BITMAP_OP_CLEAR );DEBUG_print ("queue_delayed_work: bitmap_flush_work\n" );queue_delayed_work (ic->commit_wq, &ic->bitmap_flush_work,0 ); }
@@ -2564,6 +2565,17 @@ next_chunk: goto err; } +if (ic->mode =='B' ) { +sector_t start, end; + start = (range.logical_sector >> + (ic->sb->log2_sectors_per_block + ic->log2_blocks_per_bitmap_bit)) << + (ic->sb->log2_sectors_per_block + ic->log2_blocks_per_bitmap_bit); + end = ((range.logical_sector + range.n_sectors) >> + (ic->sb->log2_sectors_per_block + ic->log2_blocks_per_bitmap_bit)) << + (ic->sb->log2_sectors_per_block + ic->log2_blocks_per_bitmap_bit); +block_bitmap_op (ic, ic->recalc_bitmap, start, end - start,BITMAP_OP_CLEAR ); + } + advance_and_next:cond_resched ();
Greg Kroah-Hartman
maintainerPATCH 168/186 dm crypt: Initialize crypto wait structures
In reply to Greg Kroah-HartmanFrom: Damien Le Moal <[email protected]>
commit 7785a9e4c228db6d01086a52d5685cd7336a08b7 upstream.
Use the DECLARE_CRYPTO_WAIT() macro to properly initialize the crypto wait structures declared on stack before their use with crypto_wait_req().
--- drivers/md/dm-crypt.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/md/dm-crypt.c +2 -2
@@ -736,7 +736,7 @@ static int crypt_iv_eboiv_gen(struct cryu8 buf[MAX_CIPHER_BLOCKSIZE ]__aligned(__alignof__(__le64)) ;struct skcipher_request *req;struct scatterlist src, dst; -struct crypto_wait wait; +DECLARE_CRYPTO_WAIT (wait);int err; req =skcipher_request_alloc (any_tfm (cc),GFP_NOIO );
@@ -933,7 +933,7 @@ static int crypt_iv_elephant(struct crypu8 *es, *ks, *data, *data2, *data_offset;struct skcipher_request *req;struct scatterlist *sg, *sg2, src, dst; -struct crypto_wait wait; +DECLARE_CRYPTO_WAIT (wait);int i, r; req =skcipher_request_alloc (elephant->tfm,GFP_NOIO );
Greg Kroah-Hartman
maintainerPATCH 169/186 dm cache metadata: Avoid returning cmd->bm wild pointer on error
In reply to Greg Kroah-HartmanFrom: Ye Bin <[email protected]>
commit d16ff19e69ab57e08bf908faaacbceaf660249de upstream.
Maybe __create_persistent_data_objects() caller will use PTR_ERR as a pointer, it will lead to some strange things.
--- drivers/md/dm-cache-metadata.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)
drivers/md/dm-cache-metadata.c +6 -2
@@ -537,12 +537,16 @@ static int __create_persistent_data_obje CACHE_MAX_CONCURRENT_LOCKS);if (IS_ERR (cmd->bm)) {DMERR ("could not create block manager" ); -return PTR_ERR (cmd->bm); + r =PTR_ERR (cmd->bm); + cmd->bm =NULL ; +return r; } r =__open_or_format_metadata (cmd, may_format_device); -if (r) +if (r) {dm_block_manager_destroy (cmd->bm); + cmd->bm =NULL ; + }return r; }
Greg Kroah-Hartman
maintainerPATCH 170/186 dm thin metadata: Avoid returning cmd->bm wild pointer on error
In reply to Greg Kroah-HartmanFrom: Ye Bin <[email protected]>
commit 219403d7e56f9b716ad80ab87db85d29547ee73e upstream.
Maybe __create_persistent_data_objects() caller will use PTR_ERR as a pointer, it will lead to some strange things.
--- drivers/md/dm-thin-metadata.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)
drivers/md/dm-thin-metadata.c +6 -2
@@ -739,12 +739,16 @@ static int __create_persistent_data_obje THIN_MAX_CONCURRENT_LOCKS);if (IS_ERR (pmd->bm)) {DMERR ("could not create block manager" ); -return PTR_ERR (pmd->bm); + r =PTR_ERR (pmd->bm); + pmd->bm =NULL ; +return r; } r =__open_or_format_metadata (pmd, format_device); -if (r) +if (r) {dm_block_manager_destroy (pmd->bm); + pmd->bm =NULL ; + }return r; }
Greg Kroah-Hartman
maintainerPATCH 171/186 dm thin metadata: Fix use-after-free in dm_bm_set_read_only
In reply to Greg Kroah-HartmanFrom: Ye Bin <[email protected]>
commit 3a653b205f29b3f9827a01a0c88bfbcb0d169494 upstream.
The following error ocurred when testing disk online/offline:
[ 301.798344] device-mapper: thin: 253:5: aborting current metadata transaction [ 301.848441] device-mapper: thin: 253:5: failed to abort metadata transaction [ 301.849206] Aborting journal on device dm-26-8. [ 301.850489] EXT4-fs error (device dm-26) in __ext4_new_inode:943: Journal has aborted [ 301.851095] EXT4-fs (dm-26): Delayed block allocation failed for inode 398742 at logical offset 181 with max blocks 19 with error 30 [ 301.854476] BUG: KASAN: use-after-free in dm_bm_set_read_only+0x3a/0x40 [dm_persistent_data]
Reason is:
metadata_operation_failed
abort_transaction
dm_pool_abort_metadata
__create_persistent_data_objects
r = __open_or_format_metadata
if (r) --> If failed will free pmd->bm but pmd->bm not set NULL
dm_block_manager_destroy(pmd->bm);
set_pool_mode
dm_pool_metadata_read_only(pool->pmd);
dm_bm_set_read_only(pmd->bm); --> use-after-freeAdd checks to see if pmd->bm is NULL in dm_bm_set_read_only and dm_bm_set_read_write functions. If bm is NULL it means creating the bm failed and so dm_bm_is_read_only must return true.
--- drivers/md/dm-thin-metadata.c | 2 +- drivers/md/persistent-data/dm-block-manager.c | 14 ++++++++------ 2 files changed, 9 insertions(+), 7 deletions(-)
drivers/md/dm-thin-metadata.c +1 -1
@@ -958,7 +958,7 @@ int dm_pool_metadata_close(struct dm_poo }pmd_write_lock_in_core (pmd); -if (!dm_bm_is_read_only (pmd->bm) && !pmd->fail_io) { +if (!pmd->fail_io && !dm_bm_is_read_only (pmd->bm)) { r =__commit_transaction (pmd);if (r <0 ) DMWARN("%s: __commit_transaction() failed, error = %d",
drivers/md/persistent-data/dm-block-manager.c +8 -6
@@ -493,7 +493,7 @@ int dm_bm_write_lock(struct dm_block_manvoid *p;int r; -if (bm->read_only) +if (dm_bm_is_read_only (bm))return -EPERM ; p =dm_bufio_read (bm->bufio, b, (struct dm_buffer **) result);
@@ -562,7 +562,7 @@ int dm_bm_write_lock_zero(struct dm_blocstruct buffer_aux *aux;void *p; -if (bm->read_only) +if (dm_bm_is_read_only (bm))return -EPERM ; p =dm_bufio_new (bm->bufio, b, (struct dm_buffer **) result);
@@ -602,7 +602,7 @@ EXPORT_SYMBOL_GPL(dm_bm_unlock);int dm_bm_flush (struct dm_block_manager *bm) { -if (bm->read_only) +if (dm_bm_is_read_only (bm))return -EPERM ;return dm_bufio_write_dirty_buffers (bm->bufio);
@@ -616,19 +616,21 @@ void dm_bm_prefetch(struct dm_block_manabool dm_bm_is_read_only (struct dm_block_manager *bm) { -return bm->read_only; +return (bm ? bm->read_only : true); }EXPORT_SYMBOL_GPL (dm_bm_is_read_only);void dm_bm_set_read_only (struct dm_block_manager *bm) { - bm->read_only = true; +if (bm) + bm->read_only = true; }EXPORT_SYMBOL_GPL (dm_bm_set_read_only);void dm_bm_set_read_write (struct dm_block_manager *bm) { - bm->read_only = false; +if (bm) + bm->read_only = false; }EXPORT_SYMBOL_GPL (dm_bm_set_read_write);
Greg Kroah-Hartman
maintainerPATCH 172/186 mm: slub: fix conversion of freelist_corrupted()
In reply to Greg Kroah-HartmanFrom: Eugeniu Rosca <[email protected]>
commit dc07a728d49cf025f5da2c31add438d839d076c0 upstream.
Commit 52f23478081ae0 ("mm/slub.c: fix corrupted freechain in deactivate_slab()") suffered an update when picked up from LKML [1].
Specifically, relocating 'freelist = NULL' into 'freelist_corrupted()' created a no-op statement. Fix it by sticking to the behavior intended in the original patch [1]. In addition, make freelist_corrupted() immune to passing NULL instead of &freelist.
The issue has been spotted via static analysis and code review.
[1] https://lore.kernel.org/linux-mm/[email protected]/
--- mm/slub.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)
mm/slub.c +6 -6
@@ -680,12 +680,12 @@ static void slab_fix(struct kmem_cache * }static bool freelist_corrupted (struct kmem_cache *s,struct page *page, -void *freelist,void *nextfree) +void **freelist,void *nextfree) {if ((s->flags &SLAB_CONSISTENCY_CHECKS ) && - !check_valid_pointer (s, page, nextfree)) { -object_err (s, page, freelist,"Freechain corrupt" ); - freelist =NULL ; + !check_valid_pointer (s, page, nextfree) && freelist) { +object_err (s, page, *freelist,"Freechain corrupt" ); + *freelist =NULL ;slab_fix (s,"Isolate corrupted freechain" );return true; }
@@ -1425,7 +1425,7 @@ static inline void dec_slabs_node(struct int objects) {}static bool freelist_corrupted (struct kmem_cache *s,struct page *page, -void *freelist,void *nextfree) +void **freelist,void *nextfree) {return false; }
@@ -2117,7 +2117,7 @@ static void deactivate_slab(struct kmem_* 'freelist' is already corrupted. So isolate all objects * starting at 'freelist'. */ -if (freelist_corrupted (s, page, freelist, nextfree)) +if (freelist_corrupted (s, page, &freelist, nextfree))break ; do {
Greg Kroah-Hartman
maintainerPATCH 173/186 mm: track page table modifications in __apply_to_page_range()
In reply to Greg Kroah-HartmanFrom: Joerg Roedel <[email protected]>
commit e80d3909be42f7e38cc350c1ba109cf0aa51956a upstream.
__apply_to_page_range() is also used to change and/or allocate page-table pages in the vmalloc area of the address space. Make sure these changes get synchronized to other page-tables in the system by calling arch_sync_kernel_mappings() when necessary.
The impact appears limited to x86-32, where apply_to_page_range may miss updating the PMD. That leads to explosions in drivers like
BUG: unable to handle page fault for address: fe036000
#PF: supervisor write access in kernel mode
#PF: error_code(0x0002) - not-present page
*pde = 00000000
Oops: 0002 [#1] SMP
CPU: 3 PID: 1300 Comm: gem_concurrent_ Not tainted 5.9.0-rc1+ #16
Hardware name: /NUC6i3SYB, BIOS SYSKLi35.86A.0024.2015.1027.2142 10/27/2015
EIP: __execlists_context_alloc+0x132/0x2d0 [i915]
Code: 31 d2 89 f0 e8 2f 55 02 00 89 45 e8 3d 00 f0 ff ff 0f 87 11 01 00 00 8b 4d e8 03 4b 30 b8 5a 5a 5a 5a ba 01 00 00 00 8d 79 04 <c7> 01 5a 5a 5a 5a c7 81 fc 0f 00 00 5a 5a 5a 5a 83 e7 fc 29 f9 81
EAX: 5a5a5a5a EBX: f60ca000 ECX: fe036000 EDX: 00000001
ESI: f43b7340 EDI: fe036004 EBP: f6389cb8 ESP: f6389c9c
DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068 EFLAGS: 00010286
CR0: 80050033 CR2: fe036000 CR3: 2d361000 CR4: 001506d0
DR0: 00000000 DR1: 00000000 DR2: 00000000 DR3: 00000000
DR6: fffe0ff0 DR7: 00000400
Call Trace:
execlists_context_alloc+0x10/0x20 [i915]
intel_context_alloc_state+0x3f/0x70 [i915]
__intel_context_do_pin+0x117/0x170 [i915]
i915_gem_do_execbuffer+0xcc7/0x2500 [i915]
i915_gem_execbuffer2_ioctl+0xcd/0x1f0 [i915]
drm_ioctl_kernel+0x8f/0xd0
drm_ioctl+0x223/0x3d0
__ia32_sys_ioctl+0x1ab/0x760
__do_fast_syscall_32+0x3f/0x70
do_fast_syscall_32+0x29/0x60
do_SYSENTER_32+0x15/0x20
entry_SYSENTER_32+0x9f/0xf2
EIP: 0xb7f28559
Code: 03 74 c0 01 10 05 03 74 b8 01 10 06 03 74 b4 01 10 07 03 74 b0 01 10 08 03 74 d8 01 00 00 00 00 00 51 52 55 89 e5 0f 34 cd 80 <5d> 5a 59 c3 90 90 90 90 8d 76 00 58 b8 77 00 00 00 cd 80 90 8d 76
EAX: ffffffda EBX: 00000005 ECX: c0406469 EDX: bf95556c
ESI: b7e68000 EDI: c0406469 EBP: 00000005 ESP: bf9554d8
DS: 007b ES: 007b FS: 0000 GS: 0033 SS: 007b EFLAGS: 00000296
Modules linked in: i915 x86_pkg_temp_thermal intel_powerclamp crc32_pclmul crc32c_intel intel_cstate intel_uncore intel_gtt drm_kms_helper intel_pch_thermal video button autofs4 i2c_i801 i2c_smbus fan
CR2: 00000000fe036000It looks like kasan, xen and i915 are vulnerable.
Actual impact is "on thinkpad X60 in 5.9-rc1, screen starts blinking after 30-or-so minutes, and machine is unusable"
--- mm/memory.c | 36 +++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 13 deletions(-)
mm/memory.c +23 -13
@@ -71,6 +71,7 @@#include <linux/dax.h> #include <linux/oom.h> #include <linux/numa.h> +#include <linux/vmalloc.h> #include <trace/events/kmem.h>
@@ -2201,7 +2202,8 @@ EXPORT_SYMBOL(vm_iomap_memory);static int apply_to_pte_range (struct mm_struct *mm,pmd_t *pmd,unsigned long addr,unsigned long end, -pte_fn_t fn,void *data,bool create) +pte_fn_t fn,void *data,bool create, +pgtbl_mod_mask *mask) {pte_t *pte;int err =0 ;
@@ -2209,7 +2211,7 @@ static int apply_to_pte_range(struct mm_if (create) { pte = (mm == &init_mm) ? -pte_alloc_kernel (pmd, addr) : +pte_alloc_kernel_track (pmd, addr, mask) :pte_alloc_map_lock (mm, pmd, addr, &ptl);if (!pte)return -ENOMEM ;
@@ -2230,6 +2232,7 @@ static int apply_to_pte_range(struct mm_break ; } }while (addr +=PAGE_SIZE , addr != end); + *mask |=PGTBL_PTE_MODIFIED ;arch_leave_lazy_mmu_mode ();
@@ -2240,7 +2243,8 @@ static int apply_to_pte_range(struct mm_static int apply_to_pmd_range (struct mm_struct *mm,pud_t *pud,unsigned long addr,unsigned long end, -pte_fn_t fn,void *data,bool create) +pte_fn_t fn,void *data,bool create, +pgtbl_mod_mask *mask) {pmd_t *pmd;unsigned long next;
@@ -2249,7 +2253,7 @@ static int apply_to_pmd_range(struct mm_BUG_ON (pud_huge (*pud));if (create) { - pmd =pmd_alloc (mm, pud, addr); + pmd =pmd_alloc_track (mm, pud, addr, mask);if (!pmd)return -ENOMEM ; }else {
@@ -2259,7 +2263,7 @@ static int apply_to_pmd_range(struct mm_ next =pmd_addr_end (addr, end);if (create || !pmd_none_or_clear_bad (pmd)) { err =apply_to_pte_range (mm, pmd, addr, next, fn, data, - create); + create, mask);if (err)break ; }
@@ -2269,14 +2273,15 @@ static int apply_to_pmd_range(struct mm_static int apply_to_pud_range (struct mm_struct *mm,p4d_t *p4d,unsigned long addr,unsigned long end, -pte_fn_t fn,void *data,bool create) +pte_fn_t fn,void *data,bool create, +pgtbl_mod_mask *mask) {pud_t *pud;unsigned long next;int err =0 ;if (create) { - pud =pud_alloc (mm, p4d, addr); + pud =pud_alloc_track (mm, p4d, addr, mask);if (!pud)return -ENOMEM ; }else {
@@ -2286,7 +2291,7 @@ static int apply_to_pud_range(struct mm_ next =pud_addr_end (addr, end);if (create || !pud_none_or_clear_bad (pud)) { err =apply_to_pmd_range (mm, pud, addr, next, fn, data, - create); + create, mask);if (err)break ; }
@@ -2296,14 +2301,15 @@ static int apply_to_pud_range(struct mm_static int apply_to_p4d_range (struct mm_struct *mm,pgd_t *pgd,unsigned long addr,unsigned long end, -pte_fn_t fn,void *data,bool create) +pte_fn_t fn,void *data,bool create, +pgtbl_mod_mask *mask) {p4d_t *p4d;unsigned long next;int err =0 ;if (create) { - p4d =p4d_alloc (mm, pgd, addr); + p4d =p4d_alloc_track (mm, pgd, addr, mask);if (!p4d)return -ENOMEM ; }else {
@@ -2313,7 +2319,7 @@ static int apply_to_p4d_range(struct mm_ next =p4d_addr_end (addr, end);if (create || !p4d_none_or_clear_bad (p4d)) { err =apply_to_pud_range (mm, p4d, addr, next, fn, data, - create); + create, mask);if (err)break ; }
@@ -2326,8 +2332,9 @@ static int __apply_to_page_range(struct void *data, bool create) {pgd_t *pgd; -unsigned long next; +unsigned long start = addr, next;unsigned long end = addr + size; +pgtbl_mod_mask mask =0 ;int err =0 ;if (WARN_ON (addr >= end))
@@ -2338,11 +2345,14 @@ static int __apply_to_page_range(struct next =pgd_addr_end (addr, end);if (!create &&pgd_none_or_clear_bad (pgd))continue ; - err =apply_to_p4d_range (mm, pgd, addr, next, fn, data, create); + err =apply_to_p4d_range (mm, pgd, addr, next, fn, data, create, &mask);if (err)break ; }while (pgd++, addr = next, addr != end); +if (mask &ARCH_PAGE_TABLE_SYNC_MASK ) +arch_sync_kernel_mappings (start, start + size); +return err; }
Greg Kroah-Hartman
maintainerPATCH 174/186 mm: madvise: fix vma user-after-free
In reply to Greg Kroah-HartmanFrom: Yang Shi <[email protected]>
commit 7867fd7cc44e63c6673cd0f8fea155456d34d0de upstream.
The syzbot reported the below use-after-free:
BUG: KASAN: use-after-free in madvise_willneed mm/madvise.c:293 [inline]
BUG: KASAN: use-after-free in madvise_vma mm/madvise.c:942 [inline]
BUG: KASAN: use-after-free in do_madvise.part.0+0x1c8b/0x1cf0 mm/madvise.c:1145
Read of size 8 at addr ffff8880a6163eb0 by task syz-executor.0/9996
CPU: 0 PID: 9996 Comm: syz-executor.0 Not tainted 5.9.0-rc1-syzkaller #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
Call Trace:
__dump_stack lib/dump_stack.c:77 [inline]
dump_stack+0x18f/0x20d lib/dump_stack.c:118
print_address_description.constprop.0.cold+0xae/0x497 mm/kasan/report.c:383
__kasan_report mm/kasan/report.c:513 [inline]
kasan_report.cold+0x1f/0x37 mm/kasan/report.c:530
madvise_willneed mm/madvise.c:293 [inline]
madvise_vma mm/madvise.c:942 [inline]
do_madvise.part.0+0x1c8b/0x1cf0 mm/madvise.c:1145
do_madvise mm/madvise.c:1169 [inline]
__do_sys_madvise mm/madvise.c:1171 [inline]
__se_sys_madvise mm/madvise.c:1169 [inline]
__x64_sys_madvise+0xd9/0x110 mm/madvise.c:1169
do_syscall_64+0x2d/0x70 arch/x86/entry/common.c:46
entry_SYSCALL_64_after_hwframe+0x44/0xa9
Allocated by task 9992:
kmem_cache_alloc+0x138/0x3a0 mm/slab.c:3482
vm_area_alloc+0x1c/0x110 kernel/fork.c:347
mmap_region+0x8e5/0x1780 mm/mmap.c:1743
do_mmap+0xcf9/0x11d0 mm/mmap.c:1545
vm_mmap_pgoff+0x195/0x200 mm/util.c:506
ksys_mmap_pgoff+0x43a/0x560 mm/mmap.c:1596
do_syscall_64+0x2d/0x70 arch/x86/entry/common.c:46
entry_SYSCALL_64_after_hwframe+0x44/0xa9
Freed by task 9992:
kmem_cache_free.part.0+0x67/0x1f0 mm/slab.c:3693
remove_vma+0x132/0x170 mm/mmap.c:184
remove_vma_list mm/mmap.c:2613 [inline]
__do_munmap+0x743/0x1170 mm/mmap.c:2869
do_munmap mm/mmap.c:2877 [inline]
mmap_region+0x257/0x1780 mm/mmap.c:1716
do_mmap+0xcf9/0x11d0 mm/mmap.c:1545
vm_mmap_pgoff+0x195/0x200 mm/util.c:506
ksys_mmap_pgoff+0x43a/0x560 mm/mmap.c:1596
do_syscall_64+0x2d/0x70 arch/x86/entry/common.c:46
entry_SYSCALL_64_after_hwframe+0x44/0xa9It is because vma is accessed after releasing mmap_lock, but someone else acquired the mmap_lock and the vma is gone.
Releasing mmap_lock after accessing vma should fix the problem.
--- mm/madvise.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
mm/madvise.c +1 -1
@@ -289,9 +289,9 @@ static long madvise_willneed(struct vm_a*/ *prev =NULL ;/* tell sys_madvise we drop mmap_lock */ get_file (file); -mmap_read_unlock (current->mm); offset = (loff_t)(start - vma->vm_start) + ((loff_t )vma->vm_pgoff <<PAGE_SHIFT ); +mmap_read_unlock (current->mm);vfs_fadvise (file, offset, end - start,POSIX_FADV_WILLNEED );fput (file);mmap_read_lock (current->mm);
Greg Kroah-Hartman
maintainerPATCH 175/186 mm/rmap: fixup copying of soft dirty and uffd ptes
In reply to Greg Kroah-HartmanFrom: Alistair Popple <[email protected]>
commit ad7df764b7e1c7dc64e016da7ada2e3e1bb90700 upstream.
During memory migration a pte is temporarily replaced with a migration swap pte. Some pte bits from the existing mapping such as the soft-dirty and uffd write-protect bits are preserved by copying these to the temporary migration swap pte.
However these bits are not stored at the same location for swap and non-swap ptes. Therefore testing these bits requires using the appropriate helper function for the given pte type.
Unfortunately several code locations were found where the wrong helper function is being used to test soft_dirty and uffd_wp bits which leads to them getting incorrectly set or cleared during page-migration.
Fix these by using the correct tests based on pte type.
--- mm/migrate.c | 15 +++++++++++---- mm/rmap.c | 9 +++++++-- 2 files changed, 18 insertions(+), 6 deletions(-)
mm/migrate.c +11 -4
@@ -2330,10 +2330,17 @@ again: entry =make_migration_entry (page, mpfn &MIGRATE_PFN_WRITE ); swp_pte =swp_entry_to_pte (entry); -if (pte_soft_dirty (pte)) - swp_pte =pte_swp_mksoft_dirty (swp_pte); -if (pte_uffd_wp (pte)) - swp_pte =pte_swp_mkuffd_wp (swp_pte); +if (pte_present (pte)) { +if (pte_soft_dirty (pte)) + swp_pte =pte_swp_mksoft_dirty (swp_pte); +if (pte_uffd_wp (pte)) + swp_pte =pte_swp_mkuffd_wp (swp_pte); + }else { +if (pte_swp_soft_dirty (pte)) + swp_pte =pte_swp_mksoft_dirty (swp_pte); +if (pte_swp_uffd_wp (pte)) + swp_pte =pte_swp_mkuffd_wp (swp_pte); + }set_pte_at (mm, addr, ptep, swp_pte);/*
mm/rmap.c +7 -2
@@ -1511,9 +1511,14 @@ static bool try_to_unmap_one(struct page*/ entry =make_migration_entry (page,0 ); swp_pte =swp_entry_to_pte (entry); -if (pte_soft_dirty (pteval)) + +/* +* pteval maps a zone device page and is therefore +* a swap pte. +*/ +if (pte_swp_soft_dirty (pteval)) swp_pte =pte_swp_mksoft_dirty (swp_pte); -if (pte_uffd_wp (pteval)) +if (pte_swp_uffd_wp (pteval)) swp_pte =pte_swp_mkuffd_wp (swp_pte);set_pte_at (mm, pvmw.address, pvmw.pte, swp_pte);/*
Greg Kroah-Hartman
maintainerPATCH 176/186 io_uring: no read/write-retry on -EAGAIN error and O_NONBLOCK marked file
In reply to Greg Kroah-HartmanFrom: Jens Axboe <[email protected]>
commit 355afaeb578abac907217c256a844cfafb0337b2 upstream.
Actually two things that need fixing up here:
- The io_rw_reissue() -EAGAIN retry is explicit to block devices and regular files, so don't ever attempt to do that on other types of files.
- If we hit -EAGAIN on a nonblock marked file, don't arm poll handler for it. It should just complete with -EAGAIN.
--- fs/io_uring.c | 13 +++++++++++++ 1 file changed, 13 insertions(+)
fs/io_uring.c +13 -0
@@ -2697,8 +2697,15 @@ static int io_read(struct io_kiocb *req,else ret2 = -EINVAL ; +/* no retry on NONBLOCK marked file */ +if (ret2 == -EAGAIN && (req->file->f_flags &O_NONBLOCK )) { + ret =0 ; + goto done; + } +/* Catch -EAGAIN return for forced non-blocking submission */ if (!force_nonblock || ret2 != -EAGAIN ) { + done:kiocb_done (kiocb, ret2); }else { copy_iov:
@@ -2823,7 +2830,13 @@ static int io_write(struct io_kiocb *req*/ if (ret2 == -EOPNOTSUPP && (kiocb->ki_flags &IOCB_NOWAIT )) ret2 = -EAGAIN ; +/* no retry on NONBLOCK marked file */ +if (ret2 == -EAGAIN && (req->file->f_flags &O_NONBLOCK )) { + ret =0 ; + goto done; + }if (!force_nonblock || ret2 != -EAGAIN ) { +done:kiocb_done (kiocb, ret2); }else { copy_iov:
Greg Kroah-Hartman
maintainerPATCH 177/186 perf record: Correct the help info of option "--no-bpf-event"
In reply to Greg Kroah-HartmanFrom: Wei Li <[email protected]>
commit a060c1f12b525ba828f871eff3127dabf8daa1e6 upstream.
The help info of option "--no-bpf-event" is wrongly described as "record bpf events", correct it.
Committer testing:
$ perf record -h bpf
Usage: perf record [<options>] [<command>]
or: perf record [<options>] -- <command> [<options>]
--clang-opt <clang options>
options passed to clang when compiling BPF scriptlets
--clang-path <clang path>
clang binary to use for compiling BPF scriptlets
--no-bpf-event do not record bpf events
$
--- tools/perf/builtin-record.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
tools/perf/builtin-record.c +1 -1
@@ -2417,7 +2417,7 @@ static struct option __record_options[]OPT_BOOLEAN (0 ,"tail-synthesize" , &record.opts.tail_synthesize,"synthesize non-sample events at the end of output" ),OPT_BOOLEAN (0 ,"overwrite" , &record.opts.overwrite,"use overwrite mode" ), -OPT_BOOLEAN (0 ,"no-bpf-event" , &record.opts.no_bpf_event,"record bpf events" ), +OPT_BOOLEAN (0 ,"no-bpf-event" , &record.opts.no_bpf_event,"do not record bpf events" ),OPT_BOOLEAN (0 ,"strict-freq" , &record.opts.strict_freq,"Fail if the specified frequency can't be used" ), OPT_CALLBACK('F', "freq", &record.opts, "freq or 'max'",
Greg Kroah-Hartman
maintainerPATCH 178/186 kconfig: streamline_config.pl: check defined(ENV variable) before using it
In reply to Greg Kroah-HartmanFrom: Randy Dunlap <[email protected]>
commit a73fbfce2cc28883f659414d598e6e60ca2214b4 upstream.
A user reported:
'Use of uninitialized value $ENV{"LMC_KEEP"} in split at
./scripts/kconfig/streamline_config.pl line 596.'
so first check that $ENV{LMC_KEEP} is defined before trying to use it.
--- scripts/kconfig/streamline_config.pl | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
scripts/kconfig/streamline_config.pl +4 -1
@@ -593,7 +593,10 @@ while ($repeat) { } my %setconfigs; -my @preserved_kconfigs = split(/:/,$ENV{LMC_KEEP}); +my @preserved_kconfigs; +if (defined($ENV{'LMC_KEEP'})) { + @preserved_kconfigs = split(/:/,$ENV{LMC_KEEP}); +} sub in_preserved_kconfigs { my $kconfig = $config2kfile{$_[0]};
Greg Kroah-Hartman
maintainerPATCH 179/186 sdhci: tegra: Add missing TMCLK for data timeout
In reply to Greg Kroah-HartmanFrom: Sowjanya Komatineni <[email protected]>
commit 8048822bac01936fda2c7b924a52131da81e6198 upstream.
commit b5a84ecf025a ("mmc: tegra: Add Tegra210 support")
Tegra210 and later has a separate sdmmc_legacy_tm (TMCLK) used by Tegra SDMMC hawdware for data timeout to achive better timeout than using SDCLK and using TMCLK is recommended.
USE_TMCLK_FOR_DATA_TIMEOUT bit in Tegra SDMMC register SDHCI_TEGRA_VENDOR_SYS_SW_CTRL can be used to choose either TMCLK or SDCLK for data timeout.
Default USE_TMCLK_FOR_DATA_TIMEOUT bit is set to 1 and TMCLK is used for data timeout by Tegra SDMMC hardware and having TMCLK not enabled is not recommended.
So, this patch adds quirk NVQUIRK_HAS_TMCLK for SoC having separate timeout clock and keeps TMCLK enabled all the time.
--- drivers/mmc/host/sdhci-tegra.c | 53 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 51 insertions(+), 2 deletions(-)
drivers/mmc/host/sdhci-tegra.c +51 -2
@@ -101,6 +101,12 @@#define NVQUIRK_DIS_CARD_CLK_CONFIG_TAP BIT(8)#define NVQUIRK_CQHCI_DCMD_R1B_CMD_TIMING BIT(9) +/* +* NVQUIRK_HAS_TMCLK is for SoC's having separate timeout clock for Tegra +* SDMMC hardware data timeout. +*/ +#define NVQUIRK_HAS_TMCLK BIT(10) +/* SDMMC CQE Base Address for Tegra Host Ver 4.1 and Higher */ #define SDHCI_TEGRA_CQE_BASE_ADDR 0xF000
@@ -131,6 +137,7 @@ struct sdhci_tegra_autocal_offsets {struct sdhci_tegra {const struct sdhci_tegra_soc_data *soc_data;struct gpio_desc *power_gpio; +struct clk *tmclk;bool ddr_signaling;bool pad_calib_required;bool pad_control_available;
@@ -1424,7 +1431,8 @@ static const struct sdhci_tegra_soc_dataNVQUIRK_HAS_PADCALIB |NVQUIRK_DIS_CARD_CLK_CONFIG_TAP |NVQUIRK_ENABLE_SDR50 | - NVQUIRK_ENABLE_SDR104, +NVQUIRK_ENABLE_SDR104 | + NVQUIRK_HAS_TMCLK, .min_tap_delay = 106, .max_tap_delay = 185, };
@@ -1462,6 +1470,7 @@ static const struct sdhci_tegra_soc_dataNVQUIRK_DIS_CARD_CLK_CONFIG_TAP |NVQUIRK_ENABLE_SDR50 |NVQUIRK_ENABLE_SDR104 | +NVQUIRK_HAS_TMCLK | NVQUIRK_CQHCI_DCMD_R1B_CMD_TIMING, .min_tap_delay = 84, .max_tap_delay = 136,
@@ -1474,7 +1483,8 @@ static const struct sdhci_tegra_soc_dataNVQUIRK_HAS_PADCALIB |NVQUIRK_DIS_CARD_CLK_CONFIG_TAP |NVQUIRK_ENABLE_SDR50 | - NVQUIRK_ENABLE_SDR104, +NVQUIRK_ENABLE_SDR104 | + NVQUIRK_HAS_TMCLK, .min_tap_delay = 96, .max_tap_delay = 139, };
@@ -1602,6 +1612,43 @@ static int sdhci_tegra_probe(struct plat goto err_power_req; } +/* +* Tegra210 has a separate SDMMC_LEGACY_TM clock used for host +* timeout clock and SW can choose TMCLK or SDCLK for hardware +* data timeout through the bit USE_TMCLK_FOR_DATA_TIMEOUT of +* the register SDHCI_TEGRA_VENDOR_SYS_SW_CTRL. +* +* USE_TMCLK_FOR_DATA_TIMEOUT bit default is set to 1 and SDMMC uses +* 12Mhz TMCLK which is advertised in host capability register. +* With TMCLK of 12Mhz provides maximum data timeout period that can +* be achieved is 11s better than using SDCLK for data timeout. +* +* So, TMCLK is set to 12Mhz and kept enabled all the time on SoC's +* supporting separate TMCLK. +*/ + +if (soc_data->nvquirks &NVQUIRK_HAS_TMCLK ) { + clk =devm_clk_get (&pdev->dev,"tmclk" ); +if (IS_ERR (clk)) { + rc =PTR_ERR (clk); +if (rc == -EPROBE_DEFER ) + goto err_power_req; + +dev_warn (&pdev->dev,"failed to get tmclk: %d\n" , rc); + clk =NULL ; + } + +clk_set_rate (clk,12000000 ); + rc =clk_prepare_enable (clk); +if (rc) { +dev_err (&pdev->dev, +"failed to enable tmclk: %d\n" , rc); + goto err_power_req; + } + + tegra_host->tmclk = clk; + } + clk =devm_clk_get (mmc_dev (host->mmc),NULL );if (IS_ERR (clk)) { rc =PTR_ERR (clk);
@@ -1645,6 +1692,7 @@ err_add_host: err_rst_get:clk_disable_unprepare (pltfm_host->clk); err_clk_get: +clk_disable_unprepare (tegra_host->tmclk); err_power_req: err_parse_dt:sdhci_pltfm_free (pdev);
@@ -1662,6 +1710,7 @@ static int sdhci_tegra_remove(struct plareset_control_assert (tegra_host->rst);usleep_range (2000 ,4000 );clk_disable_unprepare (pltfm_host->clk); +clk_disable_unprepare (tegra_host->tmclk);sdhci_pltfm_free (pdev);
Greg Kroah-Hartman
maintainerPATCH 180/186 checkpatch: fix the usage of capture group ( ... )
In reply to Greg Kroah-HartmanFrom: Mrinal Pandey <[email protected]>
commit 13e45417cedbfc44b1926124b1846f5ee8c6ba4a upstream.
The usage of "capture group (...)" in the immediate condition after && results in $1 being uninitialized. This issues a warning "Use of uninitialized value $1 in regexp compilation at ./scripts/checkpatch.pl line 2638".
I noticed this bug while running checkpatch on the set of commits from v5.7 to v5.8-rc1 of the kernel on the commits with a diff content in their commit message.
This bug was introduced in the script by commit e518e9a59ec3 ("checkpatch: emit an error when there's a diff in a changelog"). It has been in the script since then.
The author intended to store the match made by capture group in variable $1. This should have contained the name of the file as [\w/]+ matched. However, this couldn't be accomplished due to usage of capture group and $1 in the same regular expression.
Fix this by placing the capture group in the condition before &&. Thus, $1 can be initialized to the text that capture group matches thereby setting it to the desired and required value.
--- scripts/checkpatch.pl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
scripts/checkpatch.pl +2 -2
@@ -2636,8 +2636,8 @@ sub process { # Check if the commit log has what seems like a diff which can confuse patch if ($in_commit_log && !$commit_log_has_diff && - (($line =~ m@^\s+diff\b.*a/[\w/]+@ && - $line =~ m@^\s+diff\b.*a/([\w/]+)\s+b/$1\b@) || + (($line =~ m@^\s+diff\b.*a/([\w/]+)@ && + $line =~ m@^\s+diff\b.*a/[\w/]+\s+b/$1\b@) || $line =~ m@^\s*(?:\-\-\-\s+a/|\+\+\+\s+b/)@ || $line =~ m/^\s*\@\@ \-\d+,\d+ \+\d+,\d+ \@\@/)) { ERROR("DIFF_IN_COMMIT_MSG",
Greg Kroah-Hartman
maintainerPATCH 181/186 mm/migrate: fixup setting UFFD_WP flag
In reply to Greg Kroah-HartmanFrom: Alistair Popple <[email protected]>
commit ebdf8321eeeb623aed60f7ed16f7445363230118 upstream.
Commit f45ec5ff16a75 ("userfaultfd: wp: support swap and page migration") introduced support for tracking the uffd wp bit during page migration. However the non-swap PTE variant was used to set the flag for zone device private pages which are a type of swap page.
This leads to corruption of the swap offset if the original PTE has the uffd_wp flag set.
--- mm/migrate.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
mm/migrate.c +1 -1
@@ -251,7 +251,7 @@ static bool remove_migration_pte(struct entry =make_device_private_entry (new,pte_write (pte)); pte =swp_entry_to_pte (entry);if (pte_swp_uffd_wp (*pvmw.pte)) - pte =pte_mkuffd_wp (pte); + pte =pte_swp_mkuffd_wp (pte); } }
Greg Kroah-Hartman
maintainerPATCH 182/186 mm/hugetlb: try preferred node first when alloc gigantic page from cma
In reply to Greg Kroah-HartmanFrom: Li Xinhai <[email protected]>
commit 953f064aa6b29debcc211869b60bd59f26d19c34 upstream.
Since commit cf11e85fc08c ("mm: hugetlb: optionally allocate gigantic hugepages using cma"), the gigantic page would be allocated from node which is not the preferred node, although there are pages available from that node. The reason is that the nid parameter has been ignored in alloc_gigantic_page().
Besides, the __GFP_THISNODE also need be checked if user required to alloc only from the preferred node.
After this patch, the preferred node is tried first before other allowed nodes, and don't try to allocate from other nodes if __GFP_THISNODE is specified. If user don't specify the preferred node, the current node will be used as preferred node, which makes sure consistent behavior of allocating gigantic and non-gigantic hugetlb page.
--- mm/hugetlb.c | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-)
mm/hugetlb.c +17 -6
@@ -1251,21 +1251,32 @@ static struct page *alloc_gigantic_page( int nid, nodemask_t *nodemask) { unsigned long nr_pages = 1UL << huge_page_order(h); +if (nid ==NUMA_NO_NODE ) + nid =numa_mem_id ();#ifdef CONFIG_CMA {struct page *page;int node; -for_each_node_mask (node, *nodemask) { -if (!hugetlb_cma[node]) -continue ; - - page =cma_alloc (hugetlb_cma[node], nr_pages, -huge_page_order (h), true); +if (hugetlb_cma[nid]) { + page =cma_alloc (hugetlb_cma[nid], nr_pages, +huge_page_order (h), true);if (page)return page; } + +if (!(gfp_mask & __GFP_THISNODE)) { +for_each_node_mask (node, *nodemask) { +if (node == nid || !hugetlb_cma[node]) +continue ; + + page =cma_alloc (hugetlb_cma[node], nr_pages, +huge_page_order (h), true); +if (page) +return page; + } + } }#endif
Greg Kroah-Hartman
maintainerPATCH 183/186 mm/hugetlb: fix a race between hugetlb sysctl handlers
In reply to Greg Kroah-HartmanFrom: Muchun Song <[email protected]>
commit 17743798d81238ab13050e8e2833699b54e15467 upstream.
There is a race between the assignment of table->data and write value to the pointer of table->data in the __do_proc_doulongvec_minmax() on the other thread.
CPU0: CPU1:
proc_sys_write
hugetlb_sysctl_handler proc_sys_call_handler
hugetlb_sysctl_handler_common hugetlb_sysctl_handler
table->data = &tmp; hugetlb_sysctl_handler_common
table->data = &tmp;
proc_doulongvec_minmax
do_proc_doulongvec_minmax sysctl_head_finish
__do_proc_doulongvec_minmax unuse_table
i = table->data;
*i = val; // corrupt CPU1's stackFix this by duplicating the table, and only update the duplicate of it. And introduce a helper of proc_hugetlb_doulongvec_minmax() to simplify the code.
The following oops was seen:
BUG: kernel NULL pointer dereference, address: 0000000000000000
#PF: supervisor instruction fetch in kernel mode
#PF: error_code(0x0010) - not-present page
Code: Bad RIP value.
...
Call Trace:
? set_max_huge_pages+0x3da/0x4f0
? alloc_pool_huge_page+0x150/0x150
? proc_doulongvec_minmax+0x46/0x60
? hugetlb_sysctl_handler_common+0x1c7/0x200
? nr_hugepages_store+0x20/0x20
? copy_fd_bitmaps+0x170/0x170
? hugetlb_sysctl_handler+0x1e/0x20
? proc_sys_call_handler+0x2f1/0x300
? unregister_sysctl_table+0xb0/0xb0
? __fd_install+0x78/0x100
? proc_sys_write+0x14/0x20
? __vfs_write+0x4d/0x90
? vfs_write+0xef/0x240
? ksys_write+0xc0/0x160
? __ia32_sys_read+0x50/0x50
? __close_fd+0x129/0x150
? __x64_sys_write+0x43/0x50
? do_syscall_64+0x6c/0x200
? entry_SYSCALL_64_after_hwframe+0x44/0xa9--- mm/hugetlb.c | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-)
mm/hugetlb.c +20 -6
@@ -3480,6 +3480,22 @@ static unsigned int cpuset_mems_nr(unsig }#ifdef CONFIG_SYSCTL +static int proc_hugetlb_doulongvec_minmax (struct ctl_table *table,int write, +void *buffer,size_t *length, +loff_t *ppos,unsigned long *out) +{ +struct ctl_table dup_table; + +/* +* In order to avoid races with __do_proc_doulongvec_minmax(), we +* can duplicate the @table and alter the duplicate of it. +*/ + dup_table = *table; + dup_table.data = out; + +return proc_doulongvec_minmax (&dup_table, write, buffer, length, ppos); +} +static int hugetlb_sysctl_handler_common (bool obey_mempolicy,struct ctl_table *table,int write,void *buffer,size_t *length,loff_t *ppos)
@@ -3491,9 +3507,8 @@ static int hugetlb_sysctl_handler_commonif (!hugepages_supported ())return -EOPNOTSUPP ; - table->data = &tmp; - table->maxlen =sizeof (unsigned long ); - ret =proc_doulongvec_minmax (table, write, buffer, length, ppos); + ret =proc_hugetlb_doulongvec_minmax (table, write, buffer, length, ppos, + &tmp);if (ret) goto out;
@@ -3536,9 +3551,8 @@ int hugetlb_overcommit_handler(struct ctif (write &&hstate_is_gigantic (h))return -EINVAL ; - table->data = &tmp; - table->maxlen =sizeof (unsigned long ); - ret =proc_doulongvec_minmax (table, write, buffer, length, ppos); + ret =proc_hugetlb_doulongvec_minmax (table, write, buffer, length, ppos, + &tmp);if (ret) goto out;
Greg Kroah-Hartman
maintainerPATCH 184/186 mm/khugepaged.c: fix khugepageds request size in collapse_file
In reply to Greg Kroah-HartmanFrom: David Howells <[email protected]>
commit e5a59d308f52bb0052af5790c22173651b187465 upstream.
collapse_file() in khugepaged passes PAGE_SIZE as the number of pages to be read to page_cache_sync_readahead(). The intent was probably to read a single page. Fix it to use the number of pages to the end of the window instead.
--- mm/khugepaged.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
mm/khugepaged.c +1 -1
@@ -1709,7 +1709,7 @@ static void collapse_file(struct mm_struxas_unlock_irq (&xas);page_cache_sync_readahead (mapping, &file->f_ra, file, index, -PAGE_SIZE ); + end - index);/* drain pagevecs to help isolate_lru_page() */ lru_add_drain (); page =find_lock_page (mapping, index);
Greg Kroah-Hartman
maintainerPATCH 185/186 cfg80211: regulatory: reject invalid hints
In reply to Greg Kroah-HartmanFrom: Johannes Berg <[email protected]>
commit 47caf685a6854593348f216e0b489b71c10cbe03 upstream.
Reject invalid hints early in order to not cause a kernel WARN later if they're restored to or similar.
--- net/wireless/reg.c | 3 +++ 1 file changed, 3 insertions(+)
net/wireless/reg.c +3 -0
@@ -2944,6 +2944,9 @@ int regulatory_hint_user(const char *alpif (WARN_ON (!alpha2))return -EINVAL ; +if (!is_world_regdom (alpha2) && !is_an_alpha2 (alpha2)) +return -EINVAL ; + request =kzalloc (sizeof (struct regulatory_request ),GFP_KERNEL );if (!request)return -ENOMEM ;
Greg Kroah-Hartman
maintainerPATCH 186/186 net: usb: Fix uninit-was-stored issue in asix_read_phy_addr()
In reply to Greg Kroah-HartmanFrom: Himadri Pandya <[email protected]>
commit a092b7233f0e000cc6f2c71a49e2ecc6f917a5fc upstream.
The buffer size is 2 Bytes and we expect to receive the same amount of data. But sometimes we receive less data and run into uninit-was-stored issue upon read. Hence modify the error check on the return value to match with the buffer size as a prevention.
Reported-and-tested by: [email protected]
--- drivers/net/usb/asix_common.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/net/usb/asix_common.c +1 -1
@@ -296,7 +296,7 @@ int asix_read_phy_addr(struct usbnet *denetdev_dbg (dev->net,"asix_get_phy_addr()\n" ); -if (ret <0 ) { +if (ret <2 ) {netdev_err (dev->net,"Error reading PHYID register: %02x\n" , ret); goto out; }
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.8.8 release. There are 186 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 Thu, 10 Sep 2020 15:21:57 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 9 lines
https://www.kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.8.8-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.8.y
and the diffstat can be found below.thanks,
greg k-h
Compiled and booted on my test system. No dmesg regressions.
thanks,
-- Shuah
Greg Kroah-Hartman
maintainerQuoted 15 lines · Shuah Khan
Quoted 14 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.8.8 release. There are 186 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 Thu, 10 Sep 2020 15:21:57 +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/v5.x/stable-review/patch-5.8.8-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.8.y
and the diffstat can be found below.
Quoted 8 lines
Quoted 4 lines
thanks,
greg k-h
Compiled and booted on my test system. No dmesg regressions.
Tested-by Shuah Khan <[email protected]>
Thanks for testing all of them and letting me know.
greg k-h
Quoted 10 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.8.8 release. There are 186 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 Thu, 10 Sep 2020 15:21:57 +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/v5.x/stable-review/patch-5.8.8-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.8.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.
Summary
------------------------------------------------------------------------
kernel: 5.8.8-rc1
git repo: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
git branch: linux-5.8.y
git commit: 456fe9607f8f8a55179d2527598b8e90a2591e4d
git describe: v5.8.7-187-g456fe9607f8f
Test details: https://qa-reports.linaro.org/lkft/linux-stable-rc-5.8-oe/build/v5.8.7-187-g456fe9607f8f
No regressions (compared to build v5.8.7)
No fixes (compared to build v5.8.7)
Ran 36239 total tests in the following environments and test suites.
Environments
--------------
- dragonboard-410c
- hi6220-hikey
- i386
- juno-r2
- juno-r2-compat
- juno-r2-kasan
- nxp-ls2088
- qemu_arm
- qemu_arm64
- qemu_i386
- qemu_x86_64
- x15
- x86
- x86-kasan
Test Suites
-----------
* build
* igt-gpu-tools
* install-android-platform-tools-r2600
* kselftest
* kselftest/drivers
* kselftest/filesystems
* kselftest/net
* libhugetlbfs
* linux-log-parser
* ltp-cap_bounds-tests
* ltp-commands-tests
* ltp-controllers-tests
* ltp-cpuhotplug-tests
* ltp-crypto-tests
* ltp-cve-tests
* ltp-fcntl-locktests-tests
* ltp-filecaps-tests
* ltp-fs-tests
* ltp-fs_bind-tests
* ltp-fs_perms_simple-tests
* ltp-fsx-tests
* ltp-hugetlb-tests
* ltp-math-tests
* ltp-mm-tests
* ltp-nptl-tests
* ltp-pty-tests
* ltp-sched-tests
* ltp-securebits-tests
* ltp-syscalls-tests
* perf
* v4l2-compliance
* ltp-containers-tests
* ltp-ipc-tests
* ltp-tracing-tests
* network-basic-tests
* ltp-dio-tests
* ltp-io-tests
* ltp-open-posix-tests
* kselftest-vsyscall-mode-native
* kselftest-vsyscall-mode-native/drivers
* kselftest-vsyscall-mode-native/filesystems
* kselftest-vsyscall-mode-native/net
* kselftest-vsyscall-mode-none
* kselftest-vsyscall-mode-none/drivers
* kselftest-vsyscall-mode-none/filesystems
* kselftest-vsyscall-mode-none/net
* ssuite
Signature · 2 lines
Linaro LKFT https://lkft.linaro.org
Greg Kroah-Hartman
maintainerQuoted 17 lines · Naresh Kamboju
Quoted 15 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.8.8 release. There are 186 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 Thu, 10 Sep 2020 15:21:57 +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/v5.x/stable-review/patch-5.8.8-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.8.y
and the diffstat can be found below.
Quoted 8 lines
Quoted 3 lines
thanks,
greg k-h
Results from Linaro’s test farm.
No regressions on arm64, arm,x86_64, and i386.
Thanks for testing them all and letting me konw.
greg k-h
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.8.8 release. There are 186 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 Thu, 10 Sep 2020 15:21:57 +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/v5.x/stable-review/patch-5.8.8-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.8.y
and the diffstat can be found below.thanks,
greg k-h
All tests passing for Tegra ...
Test results for stable-v5.8:
14 builds: 14 pass, 0 fail
26 boots: 26 pass, 0 fail
60 tests: 60 pass, 0 failLinux version: 5.8.8-rc1-g456fe9607f8f
Boards tested: tegra124-jetson-tk1, tegra186-p2771-0000,
tegra194-p2972-0000, tegra20-ventana,
tegra210-p2371-2180, tegra210-p3450-0000,
tegra30-cardhu-a04Jon
Greg Kroah-Hartman
maintainerQuoted 26 lines · Jon Hunter
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.8.8 release. There are 186 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 Thu, 10 Sep 2020 15:21:57 +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/v5.x/stable-review/patch-5.8.8-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.8.y
and the diffstat can be found below.thanks,
greg k-h
All tests passing for Tegra ...
Test results for stable-v5.8:
14 builds: 14 pass, 0 fail 26 boots: 26 pass, 0 fail 60 tests: 60 pass, 0 fail
Quoted 7 lines
Linux version: 5.8.8-rc1-g456fe9607f8f
Boards tested: tegra124-jetson-tk1, tegra186-p2771-0000,tegra194-p2972-0000, tegra20-ventana, tegra210-p2371-2180, tegra210-p3450-0000, tegra30-cardhu-a04Tested-by Jon Hunter <[email protected]>
Great, thanks for testing and letting me know.
greg k-h
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.8.8 release. There are 186 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 Thu, 10 Sep 2020 15:21:57 +0000. Anything received after that time might be too late.
Build results:
total: 154 pass: 153 fail: 1 Failed builds: powerpc:allmodconfig Qemu test results: total: 430 pass: 430 fail: 0
The powerpc problem is the same as before:
Inconsistent kallsyms data
Try make KALLSYMS_EXTRA_PASS=1 as a workaround
KALLSYMS_EXTRA_PASS=1 doesn't help. The problem is sporadic, elusive, and all but impossible to bisect. The same build passes on another system, for example, with a different load pattern. It may pass with -j30 and fail with -j40. The problem started at some point after v5.8, and got worse over time; by now it almost always happens. I'd be happy to debug if there is a means to do it, but I don't have an idea where to even start. I'd disable KALLSYMS in my test configurations, but the symbol is selected from various places and thus difficult to disable. So unless I stop building ppc:allmodconfig entirely we'll just have to live with the failure.
Guenter
Greg Kroah-Hartman
maintainerQuoted 22 lines · Guenter Roeck
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.8.8 release. There are 186 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 Thu, 10 Sep 2020 15:21:57 +0000. Anything received after that time might be too late.
Build results:
total: 154 pass: 153 fail: 1 Failed builds: powerpc:allmodconfig Qemu test results: total: 430 pass: 430 fail: 0The powerpc problem is the same as before:
Inconsistent kallsyms data
Try make KALLSYMS_EXTRA_PASS=1 as a workaround
Quoted 9 lines
KALLSYMS_EXTRA_PASS=1 doesn't help. The problem is sporadic, elusive, and all but impossible to bisect. The same build passes on another system, for example, with a different load pattern. It may pass with -j30 and fail with -j40. The problem started at some point after v5.8, and got worse over time; by now it almost always happens. I'd be happy to debug if there is a means to do it, but I don't have an idea where to even start. I'd disable KALLSYMS in my test configurations, but the symbol is selected from various places and thus difficult to disable. So unless I stop building ppc:allmodconfig entirely we'll just have to live with the failure.
Ah, I was worried when I saw your dashboard orange for this kernel.
I guess the powerpc maintainers don't care? Sad :(
Anyway, thanks for testing them all and letting me know.
greg k-h
Quoted 33 lines · Greg Kroah-Hartman
Quoted 22 lines · Guenter Roeck
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.8.8 release. There are 186 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 Thu, 10 Sep 2020 15:21:57 +0000. Anything received after that time might be too late.
Build results:
total: 154 pass: 153 fail: 1 Failed builds: powerpc:allmodconfig Qemu test results: total: 430 pass: 430 fail: 0The powerpc problem is the same as before:
Inconsistent kallsyms data
Try make KALLSYMS_EXTRA_PASS=1 as a workaroundQuoted 9 lines
KALLSYMS_EXTRA_PASS=1 doesn't help. The problem is sporadic, elusive, and all but impossible to bisect. The same build passes on another system, for example, with a different load pattern. It may pass with -j30 and fail with -j40. The problem started at some point after v5.8, and got worse over time; by now it almost always happens. I'd be happy to debug if there is a means to do it, but I don't have an idea where to even start. I'd disable KALLSYMS in my test configurations, but the symbol is selected from various places and thus difficult to disable. So unless I stop building ppc:allmodconfig entirely we'll just have to live with the failure.
Quoted 4 lines
Ah, I was worried when I saw your dashboard orange for this kernel.
I guess the powerpc maintainers don't care? Sad :(
Not sure if the powerpc architecture is to blame. Bisect attempts end up all over the place, and don't typically include any powerpc changes. I have no idea how kallsyms is created, but my suspicion is that it is a generic problem and that powerpc just happens to hit it right now. I have added KALLSYMS_EXTRA_PASS=1 to several architecture builds over time, when they reported similar problems. Right now I set it for alpha, arm, and m68k. powerpc just happens to be the first architecture where it doesn't help.
Guenter
Hi Günter,
Quoted 39 lines · Guenter Roeck
Quoted 33 lines · Greg Kroah-Hartman
Quoted 22 lines · Guenter Roeck
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.8.8 release. There are 186 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 Thu, 10 Sep 2020 15:21:57 +0000. Anything received after that time might be too late.
Build results:
total: 154 pass: 153 fail: 1 Failed builds: powerpc:allmodconfig Qemu test results: total: 430 pass: 430 fail: 0The powerpc problem is the same as before:
Inconsistent kallsyms data
Try make KALLSYMS_EXTRA_PASS=1 as a workaroundQuoted 9 lines
KALLSYMS_EXTRA_PASS=1 doesn't help. The problem is sporadic, elusive, and all but impossible to bisect. The same build passes on another system, for example, with a different load pattern. It may pass with -j30 and fail with -j40. The problem started at some point after v5.8, and got worse over time; by now it almost always happens. I'd be happy to debug if there is a means to do it, but I don't have an idea where to even start. I'd disable KALLSYMS in my test configurations, but the symbol is selected from various places and thus difficult to disable. So unless I stop building ppc:allmodconfig entirely we'll just have to live with the failure.
Quoted 4 lines
Ah, I was worried when I saw your dashboard orange for this kernel.
I guess the powerpc maintainers don't care? Sad :(
Quoted 8 lines
Not sure if the powerpc architecture is to blame. Bisect attempts end up all over the place, and don't typically include any powerpc changes. I have no idea how kallsyms is created, but my suspicion is that it is a generic problem and that powerpc just happens to hit it right now. I have added KALLSYMS_EXTRA_PASS=1 to several architecture builds over time, when they reported similar problems. Right now I set it for alpha, arm, and m68k. powerpc just happens to be the first architecture where it doesn't help.
This is a generic problem, cfr. scripts/link-vmlinux.sh:
# kallsyms support
# Generate section listing all symbols and add it into vmlinux
# It's a three step process:
# 1) Link .tmp_vmlinux1 so it has all symbols and sections,
# but __kallsyms is empty.
# Running kallsyms on that gives us .tmp_kallsyms1.o with
# the right size
# 2) Link .tmp_vmlinux2 so it now has a __kallsyms section of
# the right size, but due to the added section, some
# addresses have shifted.
# From here, we generate a correct .tmp_kallsyms2.o
# 3) That link may have expanded the kernel image enough that
# more linker branch stubs / trampolines had to be added, which
# introduces new names, which further expands kallsyms. Do another
# pass if that is the case. In theory it's possible this results
# in even more stubs, but unlikely.
# KALLSYMS_EXTRA_PASS=1 may also used to debug or work around
# other bugs.Adding even more kallsyms_steps may help (or not, if you're really unlucky). Perhaps the number of passes should be handled automatically (i.e. run until it succeeds, with a sane (16?) upper limit to avoid
endless builds, so it can still fail, in theory).
Gr{oetje,eeting}s,
Geert
Signature · 5 lines
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected] In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds
Quoted 63 lines · Geert Uytterhoeven
Hi Günter,
Quoted 39 lines · Guenter Roeck
Quoted 33 lines · Greg Kroah-Hartman
Quoted 22 lines · Guenter Roeck
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.8.8 release. There are 186 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 Thu, 10 Sep 2020 15:21:57 +0000. Anything received after that time might be too late.
Build results:
total: 154 pass: 153 fail: 1 Failed builds: powerpc:allmodconfig Qemu test results: total: 430 pass: 430 fail: 0The powerpc problem is the same as before:
Inconsistent kallsyms data
Try make KALLSYMS_EXTRA_PASS=1 as a workaroundQuoted 9 lines
KALLSYMS_EXTRA_PASS=1 doesn't help. The problem is sporadic, elusive, and all but impossible to bisect. The same build passes on another system, for example, with a different load pattern. It may pass with -j30 and fail with -j40. The problem started at some point after v5.8, and got worse over time; by now it almost always happens. I'd be happy to debug if there is a means to do it, but I don't have an idea where to even start. I'd disable KALLSYMS in my test configurations, but the symbol is selected from various places and thus difficult to disable. So unless I stop building ppc:allmodconfig entirely we'll just have to live with the failure.
Quoted 4 lines
Ah, I was worried when I saw your dashboard orange for this kernel.
I guess the powerpc maintainers don't care? Sad :(
Quoted 8 lines
Not sure if the powerpc architecture is to blame. Bisect attempts end up all over the place, and don't typically include any powerpc changes. I have no idea how kallsyms is created, but my suspicion is that it is a generic problem and that powerpc just happens to hit it right now. I have added KALLSYMS_EXTRA_PASS=1 to several architecture builds over time, when they reported similar problems. Right now I set it for alpha, arm, and m68k. powerpc just happens to be the first architecture where it doesn't help.
This is a generic problem, cfr.
scripts/link-vmlinux.sh:# kallsyms support # Generate section listing all symbols and add it into vmlinux # It's a three step process: # 1) Link .tmp_vmlinux1 so it has all symbols and sections, # but __kallsyms is empty. # Running kallsyms on that gives us .tmp_kallsyms1.o with # the right size # 2) Link .tmp_vmlinux2 so it now has a __kallsyms section of # the right size, but due to the added section, some # addresses have shifted.
Quoted 9 lines
# From here, we generate a correct .tmp_kallsyms2.o
# 3) That link may have expanded the kernel image enough that
# more linker branch stubs / trampolines had to be added, which
# introduces new names, which further expands kallsyms. Do another
# pass if that is the case. In theory it's possible this results
# in even more stubs, but unlikely.
# KALLSYMS_EXTRA_PASS=1 may also used to debug or work around
# other bugs.Ah, that explains a lot.
Quoted 5 lines
Adding even more
kallsyms_stepsmay help (or not, if you're really unlucky). Perhaps the number of passes should be handled automatically (i.e. run until it succeeds, with a sane (16?) upper limit to avoid
endless builds, so it can still fail, in theory).
Turns out it needs four steps. I prepared a patch to try up to 8 steps. We'll see if it gets accepted.
Thanks,
Guenter