--- /dev/null
+From foo@baz Mon Oct 8 17:56:31 CEST 2018
+From: Randy Dunlap <rdunlap@infradead.org>
+Date: Fri, 20 Jul 2018 20:17:35 -0700
+Subject: arch/hexagon: fix kernel/dma.c build warning
+
+From: Randy Dunlap <rdunlap@infradead.org>
+
+[ Upstream commit 200f351e27f014fcbf69b544b0b4b72aeaf45fd3 ]
+
+Fix build warning in arch/hexagon/kernel/dma.c by casting a void *
+to unsigned long to match the function parameter type.
+
+../arch/hexagon/kernel/dma.c: In function 'arch_dma_alloc':
+../arch/hexagon/kernel/dma.c:51:5: warning: passing argument 2 of 'gen_pool_add' makes integer from pointer without a cast [enabled by default]
+../include/linux/genalloc.h:112:19: note: expected 'long unsigned int' but argument is of type 'void *'
+
+Signed-off-by: Randy Dunlap <rdunlap@infradead.org>
+Cc: Yoshinori Sato <ysato@users.sourceforge.jp>
+Cc: Rich Felker <dalias@libc.org>
+Cc: linux-sh@vger.kernel.org
+Patch-mainline: linux-kernel @ 07/20/2018, 20:17
+[rkuo@codeaurora.org: fixed architecture name]
+Signed-off-by: Richard Kuo <rkuo@codeaurora.org>
+Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ arch/hexagon/kernel/dma.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/arch/hexagon/kernel/dma.c
++++ b/arch/hexagon/kernel/dma.c
+@@ -59,7 +59,7 @@ static void *hexagon_dma_alloc_coherent(
+ panic("Can't create %s() memory pool!", __func__);
+ else
+ gen_pool_add(coherent_pool,
+- pfn_to_virt(max_low_pfn),
++ (unsigned long)pfn_to_virt(max_low_pfn),
+ hexagon_coherent_pool_size, -1);
+ }
+
--- /dev/null
+From foo@baz Mon Oct 8 17:56:31 CEST 2018
+From: Miguel Ojeda <miguel.ojeda.sandonis@gmail.com>
+Date: Sun, 9 Sep 2018 17:47:31 +0200
+Subject: arm64: jump_label.h: use asm_volatile_goto macro instead of "asm goto"
+
+From: Miguel Ojeda <miguel.ojeda.sandonis@gmail.com>
+
+[ Upstream commit 13aceef06adfaf93d52e01e28a8bc8a0ad471d83 ]
+
+All other uses of "asm goto" go through asm_volatile_goto, which avoids
+a miscompile when using GCC < 4.8.2. Replace our open-coded "asm goto"
+statements with the asm_volatile_goto macro to avoid issues with older
+toolchains.
+
+Cc: Catalin Marinas <catalin.marinas@arm.com>
+Reviewed-by: Nick Desaulniers <ndesaulniers@google.com>
+Signed-off-by: Miguel Ojeda <miguel.ojeda.sandonis@gmail.com>
+Signed-off-by: Will Deacon <will.deacon@arm.com>
+Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ arch/arm64/include/asm/jump_label.h | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/arch/arm64/include/asm/jump_label.h
++++ b/arch/arm64/include/asm/jump_label.h
+@@ -28,7 +28,7 @@
+
+ static __always_inline bool arch_static_branch(struct static_key *key, bool branch)
+ {
+- asm goto("1: nop\n\t"
++ asm_volatile_goto("1: nop\n\t"
+ ".pushsection __jump_table, \"aw\"\n\t"
+ ".align 3\n\t"
+ ".quad 1b, %l[l_yes], %c0\n\t"
+@@ -42,7 +42,7 @@ l_yes:
+
+ static __always_inline bool arch_static_branch_jump(struct static_key *key, bool branch)
+ {
+- asm goto("1: b %l[l_yes]\n\t"
++ asm_volatile_goto("1: b %l[l_yes]\n\t"
+ ".pushsection __jump_table, \"aw\"\n\t"
+ ".align 3\n\t"
+ ".quad 1b, %l[l_yes], %c0\n\t"
--- /dev/null
+From foo@baz Mon Oct 8 17:56:31 CEST 2018
+From: Dan Carpenter <dan.carpenter@oracle.com>
+Date: Thu, 6 Sep 2018 12:47:01 +0300
+Subject: cifs: read overflow in is_valid_oplock_break()
+
+From: Dan Carpenter <dan.carpenter@oracle.com>
+
+[ Upstream commit 097f5863b1a0c9901f180bbd56ae7d630655faaa ]
+
+We need to verify that the "data_offset" is within bounds.
+
+Reported-by: Dr Silvio Cesare of InfoSect <silvio.cesare@gmail.com>
+Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
+Signed-off-by: Steve French <stfrench@microsoft.com>
+Reviewed-by: Aurelien Aptel <aaptel@suse.com>
+Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ fs/cifs/misc.c | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+--- a/fs/cifs/misc.c
++++ b/fs/cifs/misc.c
+@@ -398,9 +398,17 @@ is_valid_oplock_break(char *buffer, stru
+ (struct smb_com_transaction_change_notify_rsp *)buf;
+ struct file_notify_information *pnotify;
+ __u32 data_offset = 0;
++ size_t len = srv->total_read - sizeof(pSMBr->hdr.smb_buf_length);
++
+ if (get_bcc(buf) > sizeof(struct file_notify_information)) {
+ data_offset = le32_to_cpu(pSMBr->DataOffset);
+
++ if (data_offset >
++ len - sizeof(struct file_notify_information)) {
++ cifs_dbg(FYI, "invalid data_offset %u\n",
++ data_offset);
++ return true;
++ }
+ pnotify = (struct file_notify_information *)
+ ((char *)&pSMBr->hdr.Protocol + data_offset);
+ cifs_dbg(FYI, "dnotify on %s Action: 0x%x\n",
--- /dev/null
+From foo@baz Mon Oct 8 17:56:31 CEST 2018
+From: Heinz Mauelshagen <heinzm@redhat.com>
+Date: Thu, 6 Sep 2018 18:33:40 +0200
+Subject: dm raid: fix rebuild of specific devices by updating superblock
+
+From: Heinz Mauelshagen <heinzm@redhat.com>
+
+[ Upstream commit c44a5ee803d2b7ed8c2e6ce24a5c4dd60778886e ]
+
+Update superblock when particular devices are requested via rebuild
+(e.g. lvconvert --replace ...) to avoid spurious failure with the "New
+device injected into existing raid set without 'delta_disks' or
+'rebuild' parameter specified" error message.
+
+Signed-off-by: Heinz Mauelshagen <heinzm@redhat.com>
+Signed-off-by: Mike Snitzer <snitzer@redhat.com>
+Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/md/dm-raid.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+--- a/drivers/md/dm-raid.c
++++ b/drivers/md/dm-raid.c
+@@ -3061,6 +3061,11 @@ static int raid_ctr(struct dm_target *ti
+ set_bit(RT_FLAG_UPDATE_SBS, &rs->runtime_flags);
+ rs_set_new(rs);
+ } else if (rs_is_recovering(rs)) {
++ /* Rebuild particular devices */
++ if (test_bit(__CTR_FLAG_REBUILD, &rs->ctr_flags)) {
++ set_bit(RT_FLAG_UPDATE_SBS, &rs->runtime_flags);
++ rs_setup_recovery(rs, MaxSector);
++ }
+ /* A recovering raid set may be resized */
+ ; /* skip setup rs */
+ } else if (rs_is_reshaping(rs)) {
--- /dev/null
+From foo@baz Mon Oct 8 17:56:31 CEST 2018
+From: Joe Thornber <ejt@redhat.com>
+Date: Mon, 10 Sep 2018 16:50:09 +0100
+Subject: dm thin metadata: try to avoid ever aborting transactions
+
+From: Joe Thornber <ejt@redhat.com>
+
+[ Upstream commit 3ab91828166895600efd9cdc3a0eb32001f7204a ]
+
+Committing a transaction can consume some metadata of it's own, we now
+reserve a small amount of metadata to cover this. Free metadata
+reported by the kernel will not include this reserve.
+
+If any of the reserve has been used after a commit we enter a new
+internal state PM_OUT_OF_METADATA_SPACE. This is reported as
+PM_READ_ONLY, so no userland changes are needed. If the metadata
+device is resized the pool will move back to PM_WRITE.
+
+These changes mean we never need to abort and rollback a transaction due
+to running out of metadata space. This is particularly important
+because there have been a handful of reports of data corruption against
+DM thin-provisioning that can all be attributed to the thin-pool having
+ran out of metadata space.
+
+Signed-off-by: Joe Thornber <ejt@redhat.com>
+Signed-off-by: Mike Snitzer <snitzer@redhat.com>
+Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/md/dm-thin-metadata.c | 36 ++++++++++++++++++++
+ drivers/md/dm-thin.c | 73 +++++++++++++++++++++++++++++++++++++-----
+ 2 files changed, 100 insertions(+), 9 deletions(-)
+
+--- a/drivers/md/dm-thin-metadata.c
++++ b/drivers/md/dm-thin-metadata.c
+@@ -189,6 +189,12 @@ struct dm_pool_metadata {
+ sector_t data_block_size;
+
+ /*
++ * We reserve a section of the metadata for commit overhead.
++ * All reported space does *not* include this.
++ */
++ dm_block_t metadata_reserve;
++
++ /*
+ * Set if a transaction has to be aborted but the attempt to roll back
+ * to the previous (good) transaction failed. The only pool metadata
+ * operation possible in this state is the closing of the device.
+@@ -825,6 +831,22 @@ static int __commit_transaction(struct d
+ return dm_tm_commit(pmd->tm, sblock);
+ }
+
++static void __set_metadata_reserve(struct dm_pool_metadata *pmd)
++{
++ int r;
++ dm_block_t total;
++ dm_block_t max_blocks = 4096; /* 16M */
++
++ r = dm_sm_get_nr_blocks(pmd->metadata_sm, &total);
++ if (r) {
++ DMERR("could not get size of metadata device");
++ pmd->metadata_reserve = max_blocks;
++ } else {
++ sector_div(total, 10);
++ pmd->metadata_reserve = min(max_blocks, total);
++ }
++}
++
+ struct dm_pool_metadata *dm_pool_metadata_open(struct block_device *bdev,
+ sector_t data_block_size,
+ bool format_device)
+@@ -858,6 +880,8 @@ struct dm_pool_metadata *dm_pool_metadat
+ return ERR_PTR(r);
+ }
+
++ __set_metadata_reserve(pmd);
++
+ return pmd;
+ }
+
+@@ -1829,6 +1853,13 @@ int dm_pool_get_free_metadata_block_coun
+ down_read(&pmd->root_lock);
+ if (!pmd->fail_io)
+ r = dm_sm_get_nr_free(pmd->metadata_sm, result);
++
++ if (!r) {
++ if (*result < pmd->metadata_reserve)
++ *result = 0;
++ else
++ *result -= pmd->metadata_reserve;
++ }
+ up_read(&pmd->root_lock);
+
+ return r;
+@@ -1941,8 +1972,11 @@ int dm_pool_resize_metadata_dev(struct d
+ int r = -EINVAL;
+
+ down_write(&pmd->root_lock);
+- if (!pmd->fail_io)
++ if (!pmd->fail_io) {
+ r = __resize_space_map(pmd->metadata_sm, new_count);
++ if (!r)
++ __set_metadata_reserve(pmd);
++ }
+ up_write(&pmd->root_lock);
+
+ return r;
+--- a/drivers/md/dm-thin.c
++++ b/drivers/md/dm-thin.c
+@@ -200,7 +200,13 @@ struct dm_thin_new_mapping;
+ enum pool_mode {
+ PM_WRITE, /* metadata may be changed */
+ PM_OUT_OF_DATA_SPACE, /* metadata may be changed, though data may not be allocated */
++
++ /*
++ * Like READ_ONLY, except may switch back to WRITE on metadata resize. Reported as READ_ONLY.
++ */
++ PM_OUT_OF_METADATA_SPACE,
+ PM_READ_ONLY, /* metadata may not be changed */
++
+ PM_FAIL, /* all I/O fails */
+ };
+
+@@ -1382,7 +1388,35 @@ static void set_pool_mode(struct pool *p
+
+ static void requeue_bios(struct pool *pool);
+
+-static void check_for_space(struct pool *pool)
++static bool is_read_only_pool_mode(enum pool_mode mode)
++{
++ return (mode == PM_OUT_OF_METADATA_SPACE || mode == PM_READ_ONLY);
++}
++
++static bool is_read_only(struct pool *pool)
++{
++ return is_read_only_pool_mode(get_pool_mode(pool));
++}
++
++static void check_for_metadata_space(struct pool *pool)
++{
++ int r;
++ const char *ooms_reason = NULL;
++ dm_block_t nr_free;
++
++ r = dm_pool_get_free_metadata_block_count(pool->pmd, &nr_free);
++ if (r)
++ ooms_reason = "Could not get free metadata blocks";
++ else if (!nr_free)
++ ooms_reason = "No free metadata blocks";
++
++ if (ooms_reason && !is_read_only(pool)) {
++ DMERR("%s", ooms_reason);
++ set_pool_mode(pool, PM_OUT_OF_METADATA_SPACE);
++ }
++}
++
++static void check_for_data_space(struct pool *pool)
+ {
+ int r;
+ dm_block_t nr_free;
+@@ -1408,14 +1442,16 @@ static int commit(struct pool *pool)
+ {
+ int r;
+
+- if (get_pool_mode(pool) >= PM_READ_ONLY)
++ if (get_pool_mode(pool) >= PM_OUT_OF_METADATA_SPACE)
+ return -EINVAL;
+
+ r = dm_pool_commit_metadata(pool->pmd);
+ if (r)
+ metadata_operation_failed(pool, "dm_pool_commit_metadata", r);
+- else
+- check_for_space(pool);
++ else {
++ check_for_metadata_space(pool);
++ check_for_data_space(pool);
++ }
+
+ return r;
+ }
+@@ -1481,6 +1517,19 @@ static int alloc_data_block(struct thin_
+ return r;
+ }
+
++ r = dm_pool_get_free_metadata_block_count(pool->pmd, &free_blocks);
++ if (r) {
++ metadata_operation_failed(pool, "dm_pool_get_free_metadata_block_count", r);
++ return r;
++ }
++
++ if (!free_blocks) {
++ /* Let's commit before we use up the metadata reserve. */
++ r = commit(pool);
++ if (r)
++ return r;
++ }
++
+ return 0;
+ }
+
+@@ -1512,6 +1561,7 @@ static blk_status_t should_error_unservi
+ case PM_OUT_OF_DATA_SPACE:
+ return pool->pf.error_if_no_space ? BLK_STS_NOSPC : 0;
+
++ case PM_OUT_OF_METADATA_SPACE:
+ case PM_READ_ONLY:
+ case PM_FAIL:
+ return BLK_STS_IOERR;
+@@ -2475,8 +2525,9 @@ static void set_pool_mode(struct pool *p
+ error_retry_list(pool);
+ break;
+
++ case PM_OUT_OF_METADATA_SPACE:
+ case PM_READ_ONLY:
+- if (old_mode != new_mode)
++ if (!is_read_only_pool_mode(old_mode))
+ notify_of_pool_mode_change(pool, "read-only");
+ dm_pool_metadata_read_only(pool->pmd);
+ pool->process_bio = process_bio_read_only;
+@@ -3412,6 +3463,10 @@ static int maybe_resize_metadata_dev(str
+ DMINFO("%s: growing the metadata device from %llu to %llu blocks",
+ dm_device_name(pool->pool_md),
+ sb_metadata_dev_size, metadata_dev_size);
++
++ if (get_pool_mode(pool) == PM_OUT_OF_METADATA_SPACE)
++ set_pool_mode(pool, PM_WRITE);
++
+ r = dm_pool_resize_metadata_dev(pool->pmd, metadata_dev_size);
+ if (r) {
+ metadata_operation_failed(pool, "dm_pool_resize_metadata_dev", r);
+@@ -3715,7 +3770,7 @@ static int pool_message(struct dm_target
+ struct pool_c *pt = ti->private;
+ struct pool *pool = pt->pool;
+
+- if (get_pool_mode(pool) >= PM_READ_ONLY) {
++ if (get_pool_mode(pool) >= PM_OUT_OF_METADATA_SPACE) {
+ DMERR("%s: unable to service pool target messages in READ_ONLY or FAIL mode",
+ dm_device_name(pool->pool_md));
+ return -EOPNOTSUPP;
+@@ -3789,6 +3844,7 @@ static void pool_status(struct dm_target
+ dm_block_t nr_blocks_data;
+ dm_block_t nr_blocks_metadata;
+ dm_block_t held_root;
++ enum pool_mode mode;
+ char buf[BDEVNAME_SIZE];
+ char buf2[BDEVNAME_SIZE];
+ struct pool_c *pt = ti->private;
+@@ -3859,9 +3915,10 @@ static void pool_status(struct dm_target
+ else
+ DMEMIT("- ");
+
+- if (pool->pf.mode == PM_OUT_OF_DATA_SPACE)
++ mode = get_pool_mode(pool);
++ if (mode == PM_OUT_OF_DATA_SPACE)
+ DMEMIT("out_of_data_space ");
+- else if (pool->pf.mode == PM_READ_ONLY)
++ else if (is_read_only_pool_mode(mode))
+ DMEMIT("ro ");
+ else
+ DMEMIT("rw ");
--- /dev/null
+From foo@baz Mon Oct 8 17:56:31 CEST 2018
+From: "Christian König" <christian.koenig@amd.com>
+Date: Mon, 10 Sep 2018 15:52:55 +0200
+Subject: drm/amdgpu: fix error handling in amdgpu_cs_user_fence_chunk
+
+From: "Christian König" <christian.koenig@amd.com>
+
+[ Upstream commit 0165de983272d1fae0809ed9db47c46a412279bc ]
+
+Slowly leaking memory one page at a time :)
+
+Signed-off-by: Christian König <christian.koenig@amd.com>
+Reviewed-by: Andrey Grodzovsky <andrey.grodzovsky@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 23 +++++++++++++++--------
+ 1 file changed, 15 insertions(+), 8 deletions(-)
+
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
+@@ -37,6 +37,7 @@ static int amdgpu_cs_user_fence_chunk(st
+ {
+ struct drm_gem_object *gobj;
+ unsigned long size;
++ int r;
+
+ gobj = drm_gem_object_lookup(p->filp, data->handle);
+ if (gobj == NULL)
+@@ -48,20 +49,26 @@ static int amdgpu_cs_user_fence_chunk(st
+ p->uf_entry.tv.shared = true;
+ p->uf_entry.user_pages = NULL;
+
+- size = amdgpu_bo_size(p->uf_entry.robj);
+- if (size != PAGE_SIZE || (data->offset + 8) > size)
+- return -EINVAL;
+-
+- *offset = data->offset;
+-
+ drm_gem_object_put_unlocked(gobj);
+
++ size = amdgpu_bo_size(p->uf_entry.robj);
++ if (size != PAGE_SIZE || (data->offset + 8) > size) {
++ r = -EINVAL;
++ goto error_unref;
++ }
++
+ if (amdgpu_ttm_tt_get_usermm(p->uf_entry.robj->tbo.ttm)) {
+- amdgpu_bo_unref(&p->uf_entry.robj);
+- return -EINVAL;
++ r = -EINVAL;
++ goto error_unref;
+ }
+
++ *offset = data->offset;
++
+ return 0;
++
++error_unref:
++ amdgpu_bo_unref(&p->uf_entry.robj);
++ return r;
+ }
+
+ static int amdgpu_cs_parser_init(struct amdgpu_cs_parser *p, void *data)
--- /dev/null
+From foo@baz Mon Oct 8 17:56:31 CEST 2018
+From: Ben Skeggs <bskeggs@redhat.com>
+Date: Tue, 4 Sep 2018 15:57:09 +1000
+Subject: drm/nouveau/disp: fix DP disable race
+
+From: Ben Skeggs <bskeggs@redhat.com>
+
+[ Upstream commit e04cfdc9b7398c60dbc70212415ea63b6c6a93ae ]
+
+If a HPD pulse signalling the need to retrain the link occurs between
+the KMS driver releasing the output and the supervisor interrupt that
+finishes the teardown, it was possible get a NULL-ptr deref.
+
+Avoid this by marking the link as inactive earlier.
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/gpu/drm/nouveau/nvkm/engine/disp/dp.c | 17 ++++++++++++-----
+ drivers/gpu/drm/nouveau/nvkm/engine/disp/nv50.c | 6 +++---
+ drivers/gpu/drm/nouveau/nvkm/engine/disp/outp.c | 2 ++
+ drivers/gpu/drm/nouveau/nvkm/engine/disp/outp.h | 3 ++-
+ 4 files changed, 19 insertions(+), 9 deletions(-)
+
+--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/dp.c
++++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/dp.c
+@@ -412,14 +412,10 @@ nvkm_dp_train(struct nvkm_dp *dp, u32 da
+ }
+
+ static void
+-nvkm_dp_release(struct nvkm_outp *outp, struct nvkm_ior *ior)
++nvkm_dp_disable(struct nvkm_outp *outp, struct nvkm_ior *ior)
+ {
+ struct nvkm_dp *dp = nvkm_dp(outp);
+
+- /* Prevent link from being retrained if sink sends an IRQ. */
+- atomic_set(&dp->lt.done, 0);
+- ior->dp.nr = 0;
+-
+ /* Execute DisableLT script from DP Info Table. */
+ nvbios_init(&ior->disp->engine.subdev, dp->info.script[4],
+ init.outp = &dp->outp.info;
+@@ -428,6 +424,16 @@ nvkm_dp_release(struct nvkm_outp *outp,
+ );
+ }
+
++static void
++nvkm_dp_release(struct nvkm_outp *outp)
++{
++ struct nvkm_dp *dp = nvkm_dp(outp);
++
++ /* Prevent link from being retrained if sink sends an IRQ. */
++ atomic_set(&dp->lt.done, 0);
++ dp->outp.ior->dp.nr = 0;
++}
++
+ static int
+ nvkm_dp_acquire(struct nvkm_outp *outp)
+ {
+@@ -576,6 +582,7 @@ nvkm_dp_func = {
+ .fini = nvkm_dp_fini,
+ .acquire = nvkm_dp_acquire,
+ .release = nvkm_dp_release,
++ .disable = nvkm_dp_disable,
+ };
+
+ static int
+--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/nv50.c
++++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/nv50.c
+@@ -436,11 +436,11 @@ nv50_disp_super_2_0(struct nv50_disp *di
+ nv50_disp_super_ied_off(head, ior, 2);
+
+ /* If we're shutting down the OR's only active head, execute
+- * the output path's release function.
++ * the output path's disable function.
+ */
+ if (ior->arm.head == (1 << head->id)) {
+- if ((outp = ior->arm.outp) && outp->func->release)
+- outp->func->release(outp, ior);
++ if ((outp = ior->arm.outp) && outp->func->disable)
++ outp->func->disable(outp, ior);
+ }
+ }
+
+--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/outp.c
++++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/outp.c
+@@ -93,6 +93,8 @@ nvkm_outp_release(struct nvkm_outp *outp
+ if (ior) {
+ outp->acquired &= ~user;
+ if (!outp->acquired) {
++ if (outp->func->release && outp->ior)
++ outp->func->release(outp);
+ outp->ior->asy.outp = NULL;
+ outp->ior = NULL;
+ }
+--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/outp.h
++++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/outp.h
+@@ -41,7 +41,8 @@ struct nvkm_outp_func {
+ void (*init)(struct nvkm_outp *);
+ void (*fini)(struct nvkm_outp *);
+ int (*acquire)(struct nvkm_outp *);
+- void (*release)(struct nvkm_outp *, struct nvkm_ior *);
++ void (*release)(struct nvkm_outp *);
++ void (*disable)(struct nvkm_outp *, struct nvkm_ior *);
+ };
+
+ #define OUTP_MSG(o,l,f,a...) do { \
--- /dev/null
+From foo@baz Mon Oct 8 17:56:31 CEST 2018
+From: Ben Skeggs <bskeggs@redhat.com>
+Date: Tue, 4 Sep 2018 15:56:57 +1000
+Subject: drm/nouveau/TBDdevinit: don't fail when PMU/PRE_OS is missing from VBIOS
+
+From: Ben Skeggs <bskeggs@redhat.com>
+
+[ Upstream commit 0a6986c6595e9afd20ff7280dab36431c1e467f8 ]
+
+This Falcon application doesn't appear to be present on some newer
+systems, so let's not fail init if we can't find it.
+
+TBD: is there a way to determine whether it *should* be there?
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gm200.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gm200.c
++++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gm200.c
+@@ -158,7 +158,8 @@ gm200_devinit_post(struct nvkm_devinit *
+ }
+
+ /* load and execute some other ucode image (bios therm?) */
+- return pmu_load(init, 0x01, post, NULL, NULL);
++ pmu_load(init, 0x01, post, NULL, NULL);
++ return 0;
+ }
+
+ static const struct nvkm_devinit_func
--- /dev/null
+From foo@baz Mon Oct 8 17:56:31 CEST 2018
+From: Stephen Rothwell <sfr@canb.auug.org.au>
+Date: Mon, 3 Sep 2018 13:15:58 +1000
+Subject: fs/cifs: suppress a string overflow warning
+
+From: Stephen Rothwell <sfr@canb.auug.org.au>
+
+[ Upstream commit bcfb84a996f6fa90b5e6e2954b2accb7a4711097 ]
+
+A powerpc build of cifs with gcc v8.2.0 produces this warning:
+
+fs/cifs/cifssmb.c: In function ‘CIFSSMBNegotiate’:
+fs/cifs/cifssmb.c:605:3: warning: ‘strncpy’ writing 16 bytes into a region of size 1 overflows the destination [-Wstringop-overflow=]
+ strncpy(pSMB->DialectsArray+count, protocols[i].name, 16);
+ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Since we are already doing a strlen() on the source, change the strncpy
+to a memcpy().
+
+Signed-off-by: Stephen Rothwell <sfr@canb.auug.org.au>
+Signed-off-by: Steve French <stfrench@microsoft.com>
+Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ fs/cifs/cifssmb.c | 11 ++++++++---
+ 1 file changed, 8 insertions(+), 3 deletions(-)
+
+--- a/fs/cifs/cifssmb.c
++++ b/fs/cifs/cifssmb.c
+@@ -589,10 +589,15 @@ CIFSSMBNegotiate(const unsigned int xid,
+ }
+
+ count = 0;
++ /*
++ * We know that all the name entries in the protocols array
++ * are short (< 16 bytes anyway) and are NUL terminated.
++ */
+ for (i = 0; i < CIFS_NUM_PROT; i++) {
+- strncpy(pSMB->DialectsArray+count, protocols[i].name, 16);
+- count += strlen(protocols[i].name) + 1;
+- /* null at end of source and target buffers anyway */
++ size_t len = strlen(protocols[i].name) + 1;
++
++ memcpy(pSMB->DialectsArray+count, protocols[i].name, len);
++ count += len;
+ }
+ inc_rfc1001_len(pSMB, count);
+ pSMB->ByteCount = cpu_to_le16(count);
--- /dev/null
+From foo@baz Mon Oct 8 17:56:31 CEST 2018
+From: Randy Dunlap <rdunlap@infradead.org>
+Date: Sun, 22 Jul 2018 16:03:58 -0700
+Subject: hexagon: modify ffs() and fls() to return int
+
+From: Randy Dunlap <rdunlap@infradead.org>
+
+[ Upstream commit 5c41aaad409c097cf1ef74f2c649fed994744ef5 ]
+
+Building drivers/mtd/nand/raw/nandsim.c on arch/hexagon/ produces a
+printk format build warning. This is due to hexagon's ffs() being
+coded as returning long instead of int.
+
+Fix the printk format warning by changing all of hexagon's ffs() and
+fls() functions to return int instead of long. The variables that
+they return are already int instead of long. This return type
+matches the return type in <asm-generic/bitops/>.
+
+../drivers/mtd/nand/raw/nandsim.c: In function 'init_nandsim':
+../drivers/mtd/nand/raw/nandsim.c:760:2: warning: format '%u' expects argument of type 'unsigned int', but argument 2 has type 'long int' [-Wformat]
+
+There are no ffs() or fls() allmodconfig build errors after making this
+change.
+
+Signed-off-by: Randy Dunlap <rdunlap@infradead.org>
+Cc: Richard Kuo <rkuo@codeaurora.org>
+Cc: linux-hexagon@vger.kernel.org
+Cc: Geert Uytterhoeven <geert@linux-m68k.org>
+Patch-mainline: linux-kernel @ 07/22/2018, 16:03
+Signed-off-by: Richard Kuo <rkuo@codeaurora.org>
+Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ arch/hexagon/include/asm/bitops.h | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/arch/hexagon/include/asm/bitops.h
++++ b/arch/hexagon/include/asm/bitops.h
+@@ -211,7 +211,7 @@ static inline long ffz(int x)
+ * This is defined the same way as ffs.
+ * Note fls(0) = 0, fls(1) = 1, fls(0x80000000) = 32.
+ */
+-static inline long fls(int x)
++static inline int fls(int x)
+ {
+ int r;
+
+@@ -232,7 +232,7 @@ static inline long fls(int x)
+ * the libc and compiler builtin ffs routines, therefore
+ * differs in spirit from the above ffz (man ffs).
+ */
+-static inline long ffs(int x)
++static inline int ffs(int x)
+ {
+ int r;
+
--- /dev/null
+From foo@baz Mon Oct 8 17:56:31 CEST 2018
+From: Sean O'Brien <seobrien@chromium.org>
+Date: Mon, 27 Aug 2018 13:02:15 -0700
+Subject: HID: add support for Apple Magic Keyboards
+
+From: Sean O'Brien <seobrien@chromium.org>
+
+[ Upstream commit ee345492437043a79db058a3d4f029ebcb52089a ]
+
+USB device
+ Vendor 05ac (Apple)
+ Device 026c (Magic Keyboard with Numeric Keypad)
+
+Bluetooth devices
+ Vendor 004c (Apple)
+ Device 0267 (Magic Keyboard)
+ Device 026c (Magic Keyboard with Numeric Keypad)
+
+Support already exists for the Magic Keyboard over USB connection.
+Add support for the Magic Keyboard over Bluetooth connection, and for
+the Magic Keyboard with Numeric Keypad over Bluetooth and USB
+connection.
+
+Signed-off-by: Sean O'Brien <seobrien@chromium.org>
+Reviewed-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
+Signed-off-by: Jiri Kosina <jkosina@suse.cz>
+Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/hid/hid-apple.c | 9 ++++++++-
+ drivers/hid/hid-ids.h | 2 ++
+ 2 files changed, 10 insertions(+), 1 deletion(-)
+
+--- a/drivers/hid/hid-apple.c
++++ b/drivers/hid/hid-apple.c
+@@ -335,7 +335,8 @@ static int apple_input_mapping(struct hi
+ struct hid_field *field, struct hid_usage *usage,
+ unsigned long **bit, int *max)
+ {
+- if (usage->hid == (HID_UP_CUSTOM | 0x0003)) {
++ if (usage->hid == (HID_UP_CUSTOM | 0x0003) ||
++ usage->hid == (HID_UP_MSVENDOR | 0x0003)) {
+ /* The fn key on Apple USB keyboards */
+ set_bit(EV_REP, hi->input->evbit);
+ hid_map_usage_clear(hi, usage, bit, max, EV_KEY, KEY_FN);
+@@ -472,6 +473,12 @@ static const struct hid_device_id apple_
+ .driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN },
+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_ANSI),
+ .driver_data = APPLE_HAS_FN },
++ { HID_BLUETOOTH_DEVICE(BT_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_ANSI),
++ .driver_data = APPLE_HAS_FN },
++ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_NUMPAD_ANSI),
++ .driver_data = APPLE_HAS_FN },
++ { HID_BLUETOOTH_DEVICE(BT_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_NUMPAD_ANSI),
++ .driver_data = APPLE_HAS_FN },
+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING_ANSI),
+ .driver_data = APPLE_HAS_FN },
+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING_ISO),
+--- a/drivers/hid/hid-ids.h
++++ b/drivers/hid/hid-ids.h
+@@ -85,6 +85,7 @@
+ #define USB_DEVICE_ID_ANTON_TOUCH_PAD 0x3101
+
+ #define USB_VENDOR_ID_APPLE 0x05ac
++#define BT_VENDOR_ID_APPLE 0x004c
+ #define USB_DEVICE_ID_APPLE_MIGHTYMOUSE 0x0304
+ #define USB_DEVICE_ID_APPLE_MAGICMOUSE 0x030d
+ #define USB_DEVICE_ID_APPLE_MAGICTRACKPAD 0x030e
+@@ -154,6 +155,7 @@
+ #define USB_DEVICE_ID_APPLE_ALU_WIRELESS_2011_ISO 0x0256
+ #define USB_DEVICE_ID_APPLE_ALU_WIRELESS_2011_JIS 0x0257
+ #define USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_ANSI 0x0267
++#define USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_NUMPAD_ANSI 0x026c
+ #define USB_DEVICE_ID_APPLE_WELLSPRING8_ANSI 0x0290
+ #define USB_DEVICE_ID_APPLE_WELLSPRING8_ISO 0x0291
+ #define USB_DEVICE_ID_APPLE_WELLSPRING8_JIS 0x0292
--- /dev/null
+From foo@baz Mon Oct 8 17:56:31 CEST 2018
+From: Harry Mallon <hjmallon@gmail.com>
+Date: Tue, 28 Aug 2018 22:51:29 +0100
+Subject: HID: hid-saitek: Add device ID for RAT 7 Contagion
+
+From: Harry Mallon <hjmallon@gmail.com>
+
+[ Upstream commit 43822c98f2ebb2cbd5e467ab72bbcdae7f0caa22 ]
+
+Signed-off-by: Harry Mallon <hjmallon@gmail.com>
+Signed-off-by: Jiri Kosina <jkosina@suse.cz>
+Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/hid/hid-ids.h | 1 +
+ drivers/hid/hid-saitek.c | 2 ++
+ 2 files changed, 3 insertions(+)
+
+--- a/drivers/hid/hid-ids.h
++++ b/drivers/hid/hid-ids.h
+@@ -926,6 +926,7 @@
+ #define USB_DEVICE_ID_SAITEK_RUMBLEPAD 0xff17
+ #define USB_DEVICE_ID_SAITEK_PS1000 0x0621
+ #define USB_DEVICE_ID_SAITEK_RAT7_OLD 0x0ccb
++#define USB_DEVICE_ID_SAITEK_RAT7_CONTAGION 0x0ccd
+ #define USB_DEVICE_ID_SAITEK_RAT7 0x0cd7
+ #define USB_DEVICE_ID_SAITEK_RAT9 0x0cfa
+ #define USB_DEVICE_ID_SAITEK_MMO7 0x0cd0
+--- a/drivers/hid/hid-saitek.c
++++ b/drivers/hid/hid-saitek.c
+@@ -183,6 +183,8 @@ static const struct hid_device_id saitek
+ .driver_data = SAITEK_RELEASE_MODE_RAT7 },
+ { HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_RAT7),
+ .driver_data = SAITEK_RELEASE_MODE_RAT7 },
++ { HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_RAT7_CONTAGION),
++ .driver_data = SAITEK_RELEASE_MODE_RAT7 },
+ { HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_RAT9),
+ .driver_data = SAITEK_RELEASE_MODE_RAT7 },
+ { HID_USB_DEVICE(USB_VENDOR_ID_MADCATZ, USB_DEVICE_ID_MADCATZ_RAT9),
--- /dev/null
+From foo@baz Mon Oct 8 17:56:31 CEST 2018
+From: Hans de Goede <hdegoede@redhat.com>
+Date: Sat, 18 Aug 2018 10:12:08 +0200
+Subject: HID: sensor-hub: Restore fixup for Lenovo ThinkPad Helix 2 sensor hub report
+
+From: Hans de Goede <hdegoede@redhat.com>
+
+[ Upstream commit ade573eb1e03d1ee5abcb3359b1259469ab6e8ed ]
+
+Commit b0f847e16c1e ("HID: hid-sensor-hub: Force logical minimum to 1 for
+power and report state") not only replaced the descriptor fixup done for
+devices with the HID_SENSOR_HUB_ENUM_QUIRK with a generic fix, but also
+accidentally removed the unrelated descriptor fixup for the Lenovo ThinkPad
+Helix 2 sensor hub. This commit restores this fixup.
+
+Restoring this fixup not only fixes the Lenovo ThinkPad Helix 2's sensors,
+but also the Lenovo ThinkPad 8's sensors.
+
+Fixes: b0f847e16c1e ("HID: hid-sensor-hub: Force logical minimum ...")
+Cc: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
+Cc: Fernando D S Lima <fernandodsl@gmail.com>
+Acked-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
+Signed-off-by: Hans de Goede <hdegoede@redhat.com>
+Signed-off-by: Jiri Kosina <jkosina@suse.cz>
+Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/hid/hid-sensor-hub.c | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+--- a/drivers/hid/hid-sensor-hub.c
++++ b/drivers/hid/hid-sensor-hub.c
+@@ -579,6 +579,28 @@ void sensor_hub_device_close(struct hid_
+ }
+ EXPORT_SYMBOL_GPL(sensor_hub_device_close);
+
++static __u8 *sensor_hub_report_fixup(struct hid_device *hdev, __u8 *rdesc,
++ unsigned int *rsize)
++{
++ /*
++ * Checks if the report descriptor of Thinkpad Helix 2 has a logical
++ * minimum for magnetic flux axis greater than the maximum.
++ */
++ if (hdev->product == USB_DEVICE_ID_TEXAS_INSTRUMENTS_LENOVO_YOGA &&
++ *rsize == 2558 && rdesc[913] == 0x17 && rdesc[914] == 0x40 &&
++ rdesc[915] == 0x81 && rdesc[916] == 0x08 &&
++ rdesc[917] == 0x00 && rdesc[918] == 0x27 &&
++ rdesc[921] == 0x07 && rdesc[922] == 0x00) {
++ /* Sets negative logical minimum for mag x, y and z */
++ rdesc[914] = rdesc[935] = rdesc[956] = 0xc0;
++ rdesc[915] = rdesc[936] = rdesc[957] = 0x7e;
++ rdesc[916] = rdesc[937] = rdesc[958] = 0xf7;
++ rdesc[917] = rdesc[938] = rdesc[959] = 0xff;
++ }
++
++ return rdesc;
++}
++
+ static int sensor_hub_probe(struct hid_device *hdev,
+ const struct hid_device_id *id)
+ {
+@@ -742,6 +764,7 @@ static struct hid_driver sensor_hub_driv
+ .probe = sensor_hub_probe,
+ .remove = sensor_hub_remove,
+ .raw_event = sensor_hub_raw_event,
++ .report_fixup = sensor_hub_report_fixup,
+ #ifdef CONFIG_PM
+ .suspend = sensor_hub_suspend,
+ .resume = sensor_hub_resume,
--- /dev/null
+From foo@baz Mon Oct 8 17:56:31 CEST 2018
+From: Netanel Belgazal <netanel@amazon.com>
+Date: Sun, 9 Sep 2018 08:15:21 +0000
+Subject: net: ena: fix driver when PAGE_SIZE == 64kB
+
+From: Netanel Belgazal <netanel@amazon.com>
+
+[ Upstream commit ef5b0771d247379c90c8bf1332ff32f7f74bff7f ]
+
+The buffer length field in the ena rx descriptor is 16 bit, and the
+current driver passes a full page in each ena rx descriptor.
+When PAGE_SIZE equals 64kB or more, the buffer length field becomes
+zero.
+To solve this issue, limit the ena Rx descriptor to use 16kB even
+when allocating 64kB kernel pages. This change would not impact ena
+device functionality, as 16kB is still larger than maximum MTU.
+
+Signed-off-by: Netanel Belgazal <netanel@amazon.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/net/ethernet/amazon/ena/ena_netdev.c | 10 +++++-----
+ drivers/net/ethernet/amazon/ena/ena_netdev.h | 11 +++++++++++
+ 2 files changed, 16 insertions(+), 5 deletions(-)
+
+--- a/drivers/net/ethernet/amazon/ena/ena_netdev.c
++++ b/drivers/net/ethernet/amazon/ena/ena_netdev.c
+@@ -456,7 +456,7 @@ static inline int ena_alloc_rx_page(stru
+ return -ENOMEM;
+ }
+
+- dma = dma_map_page(rx_ring->dev, page, 0, PAGE_SIZE,
++ dma = dma_map_page(rx_ring->dev, page, 0, ENA_PAGE_SIZE,
+ DMA_FROM_DEVICE);
+ if (unlikely(dma_mapping_error(rx_ring->dev, dma))) {
+ u64_stats_update_begin(&rx_ring->syncp);
+@@ -473,7 +473,7 @@ static inline int ena_alloc_rx_page(stru
+ rx_info->page_offset = 0;
+ ena_buf = &rx_info->ena_buf;
+ ena_buf->paddr = dma;
+- ena_buf->len = PAGE_SIZE;
++ ena_buf->len = ENA_PAGE_SIZE;
+
+ return 0;
+ }
+@@ -490,7 +490,7 @@ static void ena_free_rx_page(struct ena_
+ return;
+ }
+
+- dma_unmap_page(rx_ring->dev, ena_buf->paddr, PAGE_SIZE,
++ dma_unmap_page(rx_ring->dev, ena_buf->paddr, ENA_PAGE_SIZE,
+ DMA_FROM_DEVICE);
+
+ __free_page(page);
+@@ -910,10 +910,10 @@ static struct sk_buff *ena_rx_skb(struct
+ do {
+ dma_unmap_page(rx_ring->dev,
+ dma_unmap_addr(&rx_info->ena_buf, paddr),
+- PAGE_SIZE, DMA_FROM_DEVICE);
++ ENA_PAGE_SIZE, DMA_FROM_DEVICE);
+
+ skb_add_rx_frag(skb, skb_shinfo(skb)->nr_frags, rx_info->page,
+- rx_info->page_offset, len, PAGE_SIZE);
++ rx_info->page_offset, len, ENA_PAGE_SIZE);
+
+ netif_dbg(rx_ring->adapter, rx_status, rx_ring->netdev,
+ "rx skb updated. len %d. data_len %d\n",
+--- a/drivers/net/ethernet/amazon/ena/ena_netdev.h
++++ b/drivers/net/ethernet/amazon/ena/ena_netdev.h
+@@ -350,4 +350,15 @@ void ena_dump_stats_to_buf(struct ena_ad
+
+ int ena_get_sset_count(struct net_device *netdev, int sset);
+
++/* The ENA buffer length fields is 16 bit long. So when PAGE_SIZE == 64kB the
++ * driver passas 0.
++ * Since the max packet size the ENA handles is ~9kB limit the buffer length to
++ * 16kB.
++ */
++#if PAGE_SIZE > SZ_16K
++#define ENA_PAGE_SIZE SZ_16K
++#else
++#define ENA_PAGE_SIZE PAGE_SIZE
++#endif
++
+ #endif /* !(ENA_H) */
--- /dev/null
+From foo@baz Mon Oct 8 17:56:31 CEST 2018
+From: Netanel Belgazal <netanel@amazon.com>
+Date: Sun, 9 Sep 2018 08:15:25 +0000
+Subject: net: ena: fix missing calls to READ_ONCE
+
+From: Netanel Belgazal <netanel@amazon.com>
+
+[ Upstream commit 28abf4e9c9201eda5c4d29ea609d07e877b464b8 ]
+
+Add READ_ONCE calls where necessary (for example when iterating
+over a memory field that gets updated by the hardware).
+
+Signed-off-by: Netanel Belgazal <netanel@amazon.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/net/ethernet/amazon/ena/ena_com.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+--- a/drivers/net/ethernet/amazon/ena/ena_com.c
++++ b/drivers/net/ethernet/amazon/ena/ena_com.c
+@@ -457,7 +457,7 @@ static void ena_com_handle_admin_complet
+ cqe = &admin_queue->cq.entries[head_masked];
+
+ /* Go over all the completions */
+- while ((cqe->acq_common_descriptor.flags &
++ while ((READ_ONCE(cqe->acq_common_descriptor.flags) &
+ ENA_ADMIN_ACQ_COMMON_DESC_PHASE_MASK) == phase) {
+ /* Do not read the rest of the completion entry before the
+ * phase bit was validated
+@@ -633,7 +633,7 @@ static u32 ena_com_reg_bar_read32(struct
+ writel(mmio_read_reg, ena_dev->reg_bar + ENA_REGS_MMIO_REG_READ_OFF);
+
+ for (i = 0; i < timeout; i++) {
+- if (read_resp->req_id == mmio_read->seq_num)
++ if (READ_ONCE(read_resp->req_id) == mmio_read->seq_num)
+ break;
+
+ udelay(1);
+@@ -1790,8 +1790,8 @@ void ena_com_aenq_intr_handler(struct en
+ aenq_common = &aenq_e->aenq_common_desc;
+
+ /* Go over all the events */
+- while ((aenq_common->flags & ENA_ADMIN_AENQ_COMMON_DESC_PHASE_MASK) ==
+- phase) {
++ while ((READ_ONCE(aenq_common->flags) &
++ ENA_ADMIN_AENQ_COMMON_DESC_PHASE_MASK) == phase) {
+ pr_debug("AENQ! Group[%x] Syndrom[%x] timestamp: [%llus]\n",
+ aenq_common->group, aenq_common->syndrom,
+ (u64)aenq_common->timestamp_low +
--- /dev/null
+From foo@baz Mon Oct 8 17:56:31 CEST 2018
+From: Daniel Jurgens <danielj@mellanox.com>
+Date: Mon, 27 Aug 2018 09:09:46 -0500
+Subject: net/mlx5: Consider PCI domain in search for next dev
+
+From: Daniel Jurgens <danielj@mellanox.com>
+
+[ Upstream commit df7ddb2396cd162e64aaff9401be05e31e438961 ]
+
+The PCI BDF is not unique. PCI domain must also be considered when
+searching for the next physical device during lag setup. Example below:
+
+mlx5_core 0000:01:00.0: MLX5E: StrdRq(1) RqSz(8) StrdSz(128) RxCqeCmprss(0)
+mlx5_core 0000:01:00.1: MLX5E: StrdRq(1) RqSz(8) StrdSz(128) RxCqeCmprss(0)
+mlx5_core 0001:01:00.0: MLX5E: StrdRq(1) RqSz(8) StrdSz(128) RxCqeCmprss(0)
+mlx5_core 0001:01:00.1: MLX5E: StrdRq(1) RqSz(8) StrdSz(128) RxCqeCmprss(0)
+
+Signed-off-by: Daniel Jurgens <danielj@mellanox.com>
+Reviewed-by: Aviv Heller <avivh@mellanox.com>
+Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
+Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/net/ethernet/mellanox/mlx5/core/dev.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+--- a/drivers/net/ethernet/mellanox/mlx5/core/dev.c
++++ b/drivers/net/ethernet/mellanox/mlx5/core/dev.c
+@@ -388,16 +388,17 @@ void mlx5_remove_dev_by_protocol(struct
+ }
+ }
+
+-static u16 mlx5_gen_pci_id(struct mlx5_core_dev *dev)
++static u32 mlx5_gen_pci_id(struct mlx5_core_dev *dev)
+ {
+- return (u16)((dev->pdev->bus->number << 8) |
++ return (u32)((pci_domain_nr(dev->pdev->bus) << 16) |
++ (dev->pdev->bus->number << 8) |
+ PCI_SLOT(dev->pdev->devfn));
+ }
+
+ /* Must be called with intf_mutex held */
+ struct mlx5_core_dev *mlx5_get_next_phys_dev(struct mlx5_core_dev *dev)
+ {
+- u16 pci_id = mlx5_gen_pci_id(dev);
++ u32 pci_id = mlx5_gen_pci_id(dev);
+ struct mlx5_core_dev *res = NULL;
+ struct mlx5_core_dev *tmp_dev;
+ struct mlx5_priv *priv;
--- /dev/null
+From foo@baz Mon Oct 8 17:56:31 CEST 2018
+From: Pablo Neira Ayuso <pablo@netfilter.org>
+Date: Fri, 31 Aug 2018 12:36:01 +0200
+Subject: netfilter: conntrack: timeout interface depend on CONFIG_NF_CONNTRACK_TIMEOUT
+
+From: Pablo Neira Ayuso <pablo@netfilter.org>
+
+[ Upstream commit a874752a10da113f513980e28f562d946d3f829d ]
+
+Now that cttimeout support for nft_ct is in place, these should depend
+on CONFIG_NF_CONNTRACK_TIMEOUT otherwise we can crash when dumping the
+policy if this option is not enabled.
+
+[ 71.600121] BUG: unable to handle kernel NULL pointer dereference at 0000000000000000
+[...]
+[ 71.600141] CPU: 3 PID: 7612 Comm: nft Not tainted 4.18.0+ #246
+[...]
+[ 71.600188] Call Trace:
+[ 71.600201] ? nft_ct_timeout_obj_dump+0xc6/0xf0 [nft_ct]
+
+Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
+Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ net/ipv4/netfilter/nf_conntrack_proto_icmp.c | 8 ++++----
+ net/ipv6/netfilter/nf_conntrack_proto_icmpv6.c | 8 ++++----
+ net/netfilter/nf_conntrack_proto_dccp.c | 12 ++++++------
+ net/netfilter/nf_conntrack_proto_generic.c | 8 ++++----
+ net/netfilter/nf_conntrack_proto_gre.c | 8 ++++----
+ net/netfilter/nf_conntrack_proto_sctp.c | 14 +++++++-------
+ net/netfilter/nf_conntrack_proto_tcp.c | 12 ++++++------
+ net/netfilter/nf_conntrack_proto_udp.c | 20 ++++++++++----------
+ 8 files changed, 45 insertions(+), 45 deletions(-)
+
+--- a/net/ipv4/netfilter/nf_conntrack_proto_icmp.c
++++ b/net/ipv4/netfilter/nf_conntrack_proto_icmp.c
+@@ -265,7 +265,7 @@ static int icmp_nlattr_tuple_size(void)
+ }
+ #endif
+
+-#if IS_ENABLED(CONFIG_NF_CT_NETLINK_TIMEOUT)
++#ifdef CONFIG_NF_CONNTRACK_TIMEOUT
+
+ #include <linux/netfilter/nfnetlink.h>
+ #include <linux/netfilter/nfnetlink_cttimeout.h>
+@@ -303,7 +303,7 @@ static const struct nla_policy
+ icmp_timeout_nla_policy[CTA_TIMEOUT_ICMP_MAX+1] = {
+ [CTA_TIMEOUT_ICMP_TIMEOUT] = { .type = NLA_U32 },
+ };
+-#endif /* CONFIG_NF_CT_NETLINK_TIMEOUT */
++#endif /* CONFIG_NF_CONNTRACK_TIMEOUT */
+
+ #ifdef CONFIG_SYSCTL
+ static struct ctl_table icmp_sysctl_table[] = {
+@@ -365,7 +365,7 @@ struct nf_conntrack_l4proto nf_conntrack
+ .nlattr_to_tuple = icmp_nlattr_to_tuple,
+ .nla_policy = icmp_nla_policy,
+ #endif
+-#if IS_ENABLED(CONFIG_NF_CT_NETLINK_TIMEOUT)
++#ifdef CONFIG_NF_CONNTRACK_TIMEOUT
+ .ctnl_timeout = {
+ .nlattr_to_obj = icmp_timeout_nlattr_to_obj,
+ .obj_to_nlattr = icmp_timeout_obj_to_nlattr,
+@@ -373,7 +373,7 @@ struct nf_conntrack_l4proto nf_conntrack
+ .obj_size = sizeof(unsigned int),
+ .nla_policy = icmp_timeout_nla_policy,
+ },
+-#endif /* CONFIG_NF_CT_NETLINK_TIMEOUT */
++#endif /* CONFIG_NF_CONNTRACK_TIMEOUT */
+ .init_net = icmp_init_net,
+ .get_net_proto = icmp_get_net_proto,
+ };
+--- a/net/ipv6/netfilter/nf_conntrack_proto_icmpv6.c
++++ b/net/ipv6/netfilter/nf_conntrack_proto_icmpv6.c
+@@ -264,7 +264,7 @@ static int icmpv6_nlattr_tuple_size(void
+ }
+ #endif
+
+-#if IS_ENABLED(CONFIG_NF_CT_NETLINK_TIMEOUT)
++#ifdef CONFIG_NF_CONNTRACK_TIMEOUT
+
+ #include <linux/netfilter/nfnetlink.h>
+ #include <linux/netfilter/nfnetlink_cttimeout.h>
+@@ -302,7 +302,7 @@ static const struct nla_policy
+ icmpv6_timeout_nla_policy[CTA_TIMEOUT_ICMPV6_MAX+1] = {
+ [CTA_TIMEOUT_ICMPV6_TIMEOUT] = { .type = NLA_U32 },
+ };
+-#endif /* CONFIG_NF_CT_NETLINK_TIMEOUT */
++#endif /* CONFIG_NF_CONNTRACK_TIMEOUT */
+
+ #ifdef CONFIG_SYSCTL
+ static struct ctl_table icmpv6_sysctl_table[] = {
+@@ -362,7 +362,7 @@ struct nf_conntrack_l4proto nf_conntrack
+ .nlattr_to_tuple = icmpv6_nlattr_to_tuple,
+ .nla_policy = icmpv6_nla_policy,
+ #endif
+-#if IS_ENABLED(CONFIG_NF_CT_NETLINK_TIMEOUT)
++#ifdef CONFIG_NF_CONNTRACK_TIMEOUT
+ .ctnl_timeout = {
+ .nlattr_to_obj = icmpv6_timeout_nlattr_to_obj,
+ .obj_to_nlattr = icmpv6_timeout_obj_to_nlattr,
+@@ -370,7 +370,7 @@ struct nf_conntrack_l4proto nf_conntrack
+ .obj_size = sizeof(unsigned int),
+ .nla_policy = icmpv6_timeout_nla_policy,
+ },
+-#endif /* CONFIG_NF_CT_NETLINK_TIMEOUT */
++#endif /* CONFIG_NF_CONNTRACK_TIMEOUT */
+ .init_net = icmpv6_init_net,
+ .get_net_proto = icmpv6_get_net_proto,
+ };
+--- a/net/netfilter/nf_conntrack_proto_dccp.c
++++ b/net/netfilter/nf_conntrack_proto_dccp.c
+@@ -709,7 +709,7 @@ static int dccp_nlattr_size(void)
+
+ #endif
+
+-#if IS_ENABLED(CONFIG_NF_CT_NETLINK_TIMEOUT)
++#ifdef CONFIG_NF_CONNTRACK_TIMEOUT
+
+ #include <linux/netfilter/nfnetlink.h>
+ #include <linux/netfilter/nfnetlink_cttimeout.h>
+@@ -760,7 +760,7 @@ dccp_timeout_nla_policy[CTA_TIMEOUT_DCCP
+ [CTA_TIMEOUT_DCCP_CLOSING] = { .type = NLA_U32 },
+ [CTA_TIMEOUT_DCCP_TIMEWAIT] = { .type = NLA_U32 },
+ };
+-#endif /* CONFIG_NF_CT_NETLINK_TIMEOUT */
++#endif /* CONFIG_NF_CONNTRACK_TIMEOUT */
+
+ #ifdef CONFIG_SYSCTL
+ /* template, data assigned later */
+@@ -893,7 +893,7 @@ struct nf_conntrack_l4proto nf_conntrack
+ .nlattr_to_tuple = nf_ct_port_nlattr_to_tuple,
+ .nla_policy = nf_ct_port_nla_policy,
+ #endif
+-#if IS_ENABLED(CONFIG_NF_CT_NETLINK_TIMEOUT)
++#ifdef CONFIG_NF_CONNTRACK_TIMEOUT
+ .ctnl_timeout = {
+ .nlattr_to_obj = dccp_timeout_nlattr_to_obj,
+ .obj_to_nlattr = dccp_timeout_obj_to_nlattr,
+@@ -901,7 +901,7 @@ struct nf_conntrack_l4proto nf_conntrack
+ .obj_size = sizeof(unsigned int) * CT_DCCP_MAX,
+ .nla_policy = dccp_timeout_nla_policy,
+ },
+-#endif /* CONFIG_NF_CT_NETLINK_TIMEOUT */
++#endif /* CONFIG_NF_CONNTRACK_TIMEOUT */
+ .init_net = dccp_init_net,
+ .get_net_proto = dccp_get_net_proto,
+ };
+@@ -929,7 +929,7 @@ struct nf_conntrack_l4proto nf_conntrack
+ .nlattr_to_tuple = nf_ct_port_nlattr_to_tuple,
+ .nla_policy = nf_ct_port_nla_policy,
+ #endif
+-#if IS_ENABLED(CONFIG_NF_CT_NETLINK_TIMEOUT)
++#ifdef CONFIG_NF_CONNTRACK_TIMEOUT
+ .ctnl_timeout = {
+ .nlattr_to_obj = dccp_timeout_nlattr_to_obj,
+ .obj_to_nlattr = dccp_timeout_obj_to_nlattr,
+@@ -937,7 +937,7 @@ struct nf_conntrack_l4proto nf_conntrack
+ .obj_size = sizeof(unsigned int) * CT_DCCP_MAX,
+ .nla_policy = dccp_timeout_nla_policy,
+ },
+-#endif /* CONFIG_NF_CT_NETLINK_TIMEOUT */
++#endif /* CONFIG_NF_CONNTRACK_TIMEOUT */
+ .init_net = dccp_init_net,
+ .get_net_proto = dccp_get_net_proto,
+ };
+--- a/net/netfilter/nf_conntrack_proto_generic.c
++++ b/net/netfilter/nf_conntrack_proto_generic.c
+@@ -80,7 +80,7 @@ static bool generic_new(struct nf_conn *
+ return ret;
+ }
+
+-#if IS_ENABLED(CONFIG_NF_CT_NETLINK_TIMEOUT)
++#ifdef CONFIG_NF_CONNTRACK_TIMEOUT
+
+ #include <linux/netfilter/nfnetlink.h>
+ #include <linux/netfilter/nfnetlink_cttimeout.h>
+@@ -120,7 +120,7 @@ static const struct nla_policy
+ generic_timeout_nla_policy[CTA_TIMEOUT_GENERIC_MAX+1] = {
+ [CTA_TIMEOUT_GENERIC_TIMEOUT] = { .type = NLA_U32 },
+ };
+-#endif /* CONFIG_NF_CT_NETLINK_TIMEOUT */
++#endif /* CONFIG_NF_CONNTRACK_TIMEOUT */
+
+ #ifdef CONFIG_SYSCTL
+ static struct ctl_table generic_sysctl_table[] = {
+@@ -173,7 +173,7 @@ struct nf_conntrack_l4proto nf_conntrack
+ .packet = generic_packet,
+ .get_timeouts = generic_get_timeouts,
+ .new = generic_new,
+-#if IS_ENABLED(CONFIG_NF_CT_NETLINK_TIMEOUT)
++#ifdef CONFIG_NF_CONNTRACK_TIMEOUT
+ .ctnl_timeout = {
+ .nlattr_to_obj = generic_timeout_nlattr_to_obj,
+ .obj_to_nlattr = generic_timeout_obj_to_nlattr,
+@@ -181,7 +181,7 @@ struct nf_conntrack_l4proto nf_conntrack
+ .obj_size = sizeof(unsigned int),
+ .nla_policy = generic_timeout_nla_policy,
+ },
+-#endif /* CONFIG_NF_CT_NETLINK_TIMEOUT */
++#endif /* CONFIG_NF_CONNTRACK_TIMEOUT */
+ .init_net = generic_init_net,
+ .get_net_proto = generic_get_net_proto,
+ };
+--- a/net/netfilter/nf_conntrack_proto_gre.c
++++ b/net/netfilter/nf_conntrack_proto_gre.c
+@@ -290,7 +290,7 @@ static void gre_destroy(struct nf_conn *
+ nf_ct_gre_keymap_destroy(master);
+ }
+
+-#if IS_ENABLED(CONFIG_NF_CT_NETLINK_TIMEOUT)
++#ifdef CONFIG_NF_CONNTRACK_TIMEOUT
+
+ #include <linux/netfilter/nfnetlink.h>
+ #include <linux/netfilter/nfnetlink_cttimeout.h>
+@@ -337,7 +337,7 @@ gre_timeout_nla_policy[CTA_TIMEOUT_GRE_M
+ [CTA_TIMEOUT_GRE_UNREPLIED] = { .type = NLA_U32 },
+ [CTA_TIMEOUT_GRE_REPLIED] = { .type = NLA_U32 },
+ };
+-#endif /* CONFIG_NF_CT_NETLINK_TIMEOUT */
++#endif /* CONFIG_NF_CONNTRACK_TIMEOUT */
+
+ static int gre_init_net(struct net *net, u_int16_t proto)
+ {
+@@ -372,7 +372,7 @@ static struct nf_conntrack_l4proto nf_co
+ .nlattr_to_tuple = nf_ct_port_nlattr_to_tuple,
+ .nla_policy = nf_ct_port_nla_policy,
+ #endif
+-#if IS_ENABLED(CONFIG_NF_CT_NETLINK_TIMEOUT)
++#ifdef CONFIG_NF_CONNTRACK_TIMEOUT
+ .ctnl_timeout = {
+ .nlattr_to_obj = gre_timeout_nlattr_to_obj,
+ .obj_to_nlattr = gre_timeout_obj_to_nlattr,
+@@ -380,7 +380,7 @@ static struct nf_conntrack_l4proto nf_co
+ .obj_size = sizeof(unsigned int) * GRE_CT_MAX,
+ .nla_policy = gre_timeout_nla_policy,
+ },
+-#endif /* CONFIG_NF_CT_NETLINK_TIMEOUT */
++#endif /* CONFIG_NF_CONNTRACK_TIMEOUT */
+ .net_id = &proto_gre_net_id,
+ .init_net = gre_init_net,
+ };
+--- a/net/netfilter/nf_conntrack_proto_sctp.c
++++ b/net/netfilter/nf_conntrack_proto_sctp.c
+@@ -618,7 +618,7 @@ static int sctp_nlattr_size(void)
+ }
+ #endif
+
+-#if IS_ENABLED(CONFIG_NF_CT_NETLINK_TIMEOUT)
++#ifdef CONFIG_NF_CONNTRACK_TIMEOUT
+
+ #include <linux/netfilter/nfnetlink.h>
+ #include <linux/netfilter/nfnetlink_cttimeout.h>
+@@ -671,7 +671,7 @@ sctp_timeout_nla_policy[CTA_TIMEOUT_SCTP
+ [CTA_TIMEOUT_SCTP_HEARTBEAT_SENT] = { .type = NLA_U32 },
+ [CTA_TIMEOUT_SCTP_HEARTBEAT_ACKED] = { .type = NLA_U32 },
+ };
+-#endif /* CONFIG_NF_CT_NETLINK_TIMEOUT */
++#endif /* CONFIG_NF_CONNTRACK_TIMEOUT */
+
+
+ #ifdef CONFIG_SYSCTL
+@@ -803,7 +803,7 @@ struct nf_conntrack_l4proto nf_conntrack
+ .nlattr_to_tuple = nf_ct_port_nlattr_to_tuple,
+ .nla_policy = nf_ct_port_nla_policy,
+ #endif
+-#if IS_ENABLED(CONFIG_NF_CT_NETLINK_TIMEOUT)
++#ifdef CONFIG_NF_CONNTRACK_TIMEOUT
+ .ctnl_timeout = {
+ .nlattr_to_obj = sctp_timeout_nlattr_to_obj,
+ .obj_to_nlattr = sctp_timeout_obj_to_nlattr,
+@@ -811,7 +811,7 @@ struct nf_conntrack_l4proto nf_conntrack
+ .obj_size = sizeof(unsigned int) * SCTP_CONNTRACK_MAX,
+ .nla_policy = sctp_timeout_nla_policy,
+ },
+-#endif /* CONFIG_NF_CT_NETLINK_TIMEOUT */
++#endif /* CONFIG_NF_CONNTRACK_TIMEOUT */
+ .init_net = sctp_init_net,
+ .get_net_proto = sctp_get_net_proto,
+ };
+@@ -839,7 +839,8 @@ struct nf_conntrack_l4proto nf_conntrack
+ .nlattr_tuple_size = nf_ct_port_nlattr_tuple_size,
+ .nlattr_to_tuple = nf_ct_port_nlattr_to_tuple,
+ .nla_policy = nf_ct_port_nla_policy,
+-#if IS_ENABLED(CONFIG_NF_CT_NETLINK_TIMEOUT)
++#endif
++#ifdef CONFIG_NF_CONNTRACK_TIMEOUT
+ .ctnl_timeout = {
+ .nlattr_to_obj = sctp_timeout_nlattr_to_obj,
+ .obj_to_nlattr = sctp_timeout_obj_to_nlattr,
+@@ -847,8 +848,7 @@ struct nf_conntrack_l4proto nf_conntrack
+ .obj_size = sizeof(unsigned int) * SCTP_CONNTRACK_MAX,
+ .nla_policy = sctp_timeout_nla_policy,
+ },
+-#endif /* CONFIG_NF_CT_NETLINK_TIMEOUT */
+-#endif
++#endif /* CONFIG_NF_CONNTRACK_TIMEOUT */
+ .init_net = sctp_init_net,
+ .get_net_proto = sctp_get_net_proto,
+ };
+--- a/net/netfilter/nf_conntrack_proto_tcp.c
++++ b/net/netfilter/nf_conntrack_proto_tcp.c
+@@ -1294,7 +1294,7 @@ static int tcp_nlattr_tuple_size(void)
+ }
+ #endif
+
+-#if IS_ENABLED(CONFIG_NF_CT_NETLINK_TIMEOUT)
++#ifdef CONFIG_NF_CONNTRACK_TIMEOUT
+
+ #include <linux/netfilter/nfnetlink.h>
+ #include <linux/netfilter/nfnetlink_cttimeout.h>
+@@ -1404,7 +1404,7 @@ static const struct nla_policy tcp_timeo
+ [CTA_TIMEOUT_TCP_RETRANS] = { .type = NLA_U32 },
+ [CTA_TIMEOUT_TCP_UNACK] = { .type = NLA_U32 },
+ };
+-#endif /* CONFIG_NF_CT_NETLINK_TIMEOUT */
++#endif /* CONFIG_NF_CONNTRACK_TIMEOUT */
+
+ #ifdef CONFIG_SYSCTL
+ static struct ctl_table tcp_sysctl_table[] = {
+@@ -1567,7 +1567,7 @@ struct nf_conntrack_l4proto nf_conntrack
+ .nlattr_tuple_size = tcp_nlattr_tuple_size,
+ .nla_policy = nf_ct_port_nla_policy,
+ #endif
+-#if IS_ENABLED(CONFIG_NF_CT_NETLINK_TIMEOUT)
++#ifdef CONFIG_NF_CONNTRACK_TIMEOUT
+ .ctnl_timeout = {
+ .nlattr_to_obj = tcp_timeout_nlattr_to_obj,
+ .obj_to_nlattr = tcp_timeout_obj_to_nlattr,
+@@ -1576,7 +1576,7 @@ struct nf_conntrack_l4proto nf_conntrack
+ TCP_CONNTRACK_TIMEOUT_MAX,
+ .nla_policy = tcp_timeout_nla_policy,
+ },
+-#endif /* CONFIG_NF_CT_NETLINK_TIMEOUT */
++#endif /* CONFIG_NF_CONNTRACK_TIMEOUT */
+ .init_net = tcp_init_net,
+ .get_net_proto = tcp_get_net_proto,
+ };
+@@ -1605,7 +1605,7 @@ struct nf_conntrack_l4proto nf_conntrack
+ .nlattr_tuple_size = tcp_nlattr_tuple_size,
+ .nla_policy = nf_ct_port_nla_policy,
+ #endif
+-#if IS_ENABLED(CONFIG_NF_CT_NETLINK_TIMEOUT)
++#ifdef CONFIG_NF_CONNTRACK_TIMEOUT
+ .ctnl_timeout = {
+ .nlattr_to_obj = tcp_timeout_nlattr_to_obj,
+ .obj_to_nlattr = tcp_timeout_obj_to_nlattr,
+@@ -1614,7 +1614,7 @@ struct nf_conntrack_l4proto nf_conntrack
+ TCP_CONNTRACK_TIMEOUT_MAX,
+ .nla_policy = tcp_timeout_nla_policy,
+ },
+-#endif /* CONFIG_NF_CT_NETLINK_TIMEOUT */
++#endif /* CONFIG_NF_CONNTRACK_TIMEOUT */
+ .init_net = tcp_init_net,
+ .get_net_proto = tcp_get_net_proto,
+ };
+--- a/net/netfilter/nf_conntrack_proto_udp.c
++++ b/net/netfilter/nf_conntrack_proto_udp.c
+@@ -195,7 +195,7 @@ static int udp_error(struct net *net, st
+ return NF_ACCEPT;
+ }
+
+-#if IS_ENABLED(CONFIG_NF_CT_NETLINK_TIMEOUT)
++#ifdef CONFIG_NF_CONNTRACK_TIMEOUT
+
+ #include <linux/netfilter/nfnetlink.h>
+ #include <linux/netfilter/nfnetlink_cttimeout.h>
+@@ -242,7 +242,7 @@ udp_timeout_nla_policy[CTA_TIMEOUT_UDP_M
+ [CTA_TIMEOUT_UDP_UNREPLIED] = { .type = NLA_U32 },
+ [CTA_TIMEOUT_UDP_REPLIED] = { .type = NLA_U32 },
+ };
+-#endif /* CONFIG_NF_CT_NETLINK_TIMEOUT */
++#endif /* CONFIG_NF_CONNTRACK_TIMEOUT */
+
+ #ifdef CONFIG_SYSCTL
+ static struct ctl_table udp_sysctl_table[] = {
+@@ -316,7 +316,7 @@ struct nf_conntrack_l4proto nf_conntrack
+ .nlattr_tuple_size = nf_ct_port_nlattr_tuple_size,
+ .nla_policy = nf_ct_port_nla_policy,
+ #endif
+-#if IS_ENABLED(CONFIG_NF_CT_NETLINK_TIMEOUT)
++#ifdef CONFIG_NF_CONNTRACK_TIMEOUT
+ .ctnl_timeout = {
+ .nlattr_to_obj = udp_timeout_nlattr_to_obj,
+ .obj_to_nlattr = udp_timeout_obj_to_nlattr,
+@@ -324,7 +324,7 @@ struct nf_conntrack_l4proto nf_conntrack
+ .obj_size = sizeof(unsigned int) * CTA_TIMEOUT_UDP_MAX,
+ .nla_policy = udp_timeout_nla_policy,
+ },
+-#endif /* CONFIG_NF_CT_NETLINK_TIMEOUT */
++#endif /* CONFIG_NF_CONNTRACK_TIMEOUT */
+ .init_net = udp_init_net,
+ .get_net_proto = udp_get_net_proto,
+ };
+@@ -348,7 +348,7 @@ struct nf_conntrack_l4proto nf_conntrack
+ .nlattr_tuple_size = nf_ct_port_nlattr_tuple_size,
+ .nla_policy = nf_ct_port_nla_policy,
+ #endif
+-#if IS_ENABLED(CONFIG_NF_CT_NETLINK_TIMEOUT)
++#ifdef CONFIG_NF_CONNTRACK_TIMEOUT
+ .ctnl_timeout = {
+ .nlattr_to_obj = udp_timeout_nlattr_to_obj,
+ .obj_to_nlattr = udp_timeout_obj_to_nlattr,
+@@ -356,7 +356,7 @@ struct nf_conntrack_l4proto nf_conntrack
+ .obj_size = sizeof(unsigned int) * CTA_TIMEOUT_UDP_MAX,
+ .nla_policy = udp_timeout_nla_policy,
+ },
+-#endif /* CONFIG_NF_CT_NETLINK_TIMEOUT */
++#endif /* CONFIG_NF_CONNTRACK_TIMEOUT */
+ .init_net = udp_init_net,
+ .get_net_proto = udp_get_net_proto,
+ };
+@@ -380,7 +380,7 @@ struct nf_conntrack_l4proto nf_conntrack
+ .nlattr_tuple_size = nf_ct_port_nlattr_tuple_size,
+ .nla_policy = nf_ct_port_nla_policy,
+ #endif
+-#if IS_ENABLED(CONFIG_NF_CT_NETLINK_TIMEOUT)
++#ifdef CONFIG_NF_CONNTRACK_TIMEOUT
+ .ctnl_timeout = {
+ .nlattr_to_obj = udp_timeout_nlattr_to_obj,
+ .obj_to_nlattr = udp_timeout_obj_to_nlattr,
+@@ -388,7 +388,7 @@ struct nf_conntrack_l4proto nf_conntrack
+ .obj_size = sizeof(unsigned int) * CTA_TIMEOUT_UDP_MAX,
+ .nla_policy = udp_timeout_nla_policy,
+ },
+-#endif /* CONFIG_NF_CT_NETLINK_TIMEOUT */
++#endif /* CONFIG_NF_CONNTRACK_TIMEOUT */
+ .init_net = udp_init_net,
+ .get_net_proto = udp_get_net_proto,
+ };
+@@ -412,7 +412,7 @@ struct nf_conntrack_l4proto nf_conntrack
+ .nlattr_tuple_size = nf_ct_port_nlattr_tuple_size,
+ .nla_policy = nf_ct_port_nla_policy,
+ #endif
+-#if IS_ENABLED(CONFIG_NF_CT_NETLINK_TIMEOUT)
++#ifdef CONFIG_NF_CONNTRACK_TIMEOUT
+ .ctnl_timeout = {
+ .nlattr_to_obj = udp_timeout_nlattr_to_obj,
+ .obj_to_nlattr = udp_timeout_obj_to_nlattr,
+@@ -420,7 +420,7 @@ struct nf_conntrack_l4proto nf_conntrack
+ .obj_size = sizeof(unsigned int) * CTA_TIMEOUT_UDP_MAX,
+ .nla_policy = udp_timeout_nla_policy,
+ },
+-#endif /* CONFIG_NF_CT_NETLINK_TIMEOUT */
++#endif /* CONFIG_NF_CONNTRACK_TIMEOUT */
+ .init_net = udp_init_net,
+ .get_net_proto = udp_get_net_proto,
+ };
--- /dev/null
+From foo@baz Mon Oct 8 17:56:31 CEST 2018
+From: Taehee Yoo <ap420073@gmail.com>
+Date: Sun, 26 Aug 2018 02:35:44 +0900
+Subject: netfilter: nf_tables: release chain in flushing set
+
+From: Taehee Yoo <ap420073@gmail.com>
+
+[ Upstream commit 7acfda539c0b9636a58bfee56abfb3aeee806d96 ]
+
+When element of verdict map is deleted, the delete routine should
+release chain. however, flush element of verdict map routine doesn't
+release chain.
+
+test commands:
+ %nft add table ip filter
+ %nft add chain ip filter c1
+ %nft add map ip filter map1 { type ipv4_addr : verdict \; }
+ %nft add element ip filter map1 { 1 : jump c1 }
+ %nft flush map ip filter map1
+ %nft flush ruleset
+
+splat looks like:
+[ 4895.170899] kernel BUG at net/netfilter/nf_tables_api.c:1415!
+[ 4895.178114] invalid opcode: 0000 [#1] SMP DEBUG_PAGEALLOC KASAN PTI
+[ 4895.178880] CPU: 0 PID: 1670 Comm: nft Not tainted 4.18.0+ #55
+[ 4895.178880] RIP: 0010:nf_tables_chain_destroy.isra.28+0x39/0x220 [nf_tables]
+[ 4895.178880] Code: fc ff df 53 48 89 fb 48 83 c7 50 48 89 fa 48 c1 ea 03 0f b6 04 02 84 c0 74 09 3c 03 7f 05 e8 3e 4c 25 e1 8b 43 50 85 c0 74 02 <0f> 0b 48 89 da 48 b8 00 00 00 00 00 fc ff df 48 c1 ea 03 80 3c 02
+[ 4895.228342] RSP: 0018:ffff88010b98f4c0 EFLAGS: 00010202
+[ 4895.234841] RAX: 0000000000000001 RBX: ffff8801131c6968 RCX: ffff8801146585b0
+[ 4895.234841] RDX: 1ffff10022638d37 RSI: ffff8801191a9348 RDI: ffff8801131c69b8
+[ 4895.234841] RBP: ffff8801146585a8 R08: 1ffff1002323526a R09: 0000000000000000
+[ 4895.234841] R10: 0000000000000000 R11: 0000000000000000 R12: dead000000000200
+[ 4895.234841] R13: dead000000000100 R14: ffffffffa3638af8 R15: dffffc0000000000
+[ 4895.234841] FS: 00007f6d188e6700(0000) GS:ffff88011b600000(0000) knlGS:0000000000000000
+[ 4895.234841] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
+[ 4895.234841] CR2: 00007ffe72b8df88 CR3: 000000010e2d4000 CR4: 00000000001006f0
+[ 4895.234841] Call Trace:
+[ 4895.234841] nf_tables_commit+0x2704/0x2c70 [nf_tables]
+[ 4895.234841] ? nfnetlink_rcv_batch+0xa4f/0x11b0 [nfnetlink]
+[ 4895.234841] ? nf_tables_setelem_notify.constprop.48+0x1a0/0x1a0 [nf_tables]
+[ 4895.323824] ? __lock_is_held+0x9d/0x130
+[ 4895.323824] ? kasan_unpoison_shadow+0x30/0x40
+[ 4895.333299] ? kasan_kmalloc+0xa9/0xc0
+[ 4895.333299] ? kmem_cache_alloc_trace+0x2c0/0x310
+[ 4895.333299] ? nfnetlink_rcv_batch+0xa4f/0x11b0 [nfnetlink]
+[ 4895.333299] nfnetlink_rcv_batch+0xdb9/0x11b0 [nfnetlink]
+[ 4895.333299] ? debug_show_all_locks+0x290/0x290
+[ 4895.333299] ? nfnetlink_net_init+0x150/0x150 [nfnetlink]
+[ 4895.333299] ? sched_clock_cpu+0xe5/0x170
+[ 4895.333299] ? sched_clock_local+0xff/0x130
+[ 4895.333299] ? sched_clock_cpu+0xe5/0x170
+[ 4895.333299] ? find_held_lock+0x39/0x1b0
+[ 4895.333299] ? sched_clock_local+0xff/0x130
+[ 4895.333299] ? memset+0x1f/0x40
+[ 4895.333299] ? nla_parse+0x33/0x260
+[ 4895.333299] ? ns_capable_common+0x6e/0x110
+[ 4895.333299] nfnetlink_rcv+0x2c0/0x310 [nfnetlink]
+[ ... ]
+
+Fixes: 591054469b3e ("netfilter: nf_tables: revisit chain/object refcounting from elements")
+Signed-off-by: Taehee Yoo <ap420073@gmail.com>
+Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
+Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ net/netfilter/nf_tables_api.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/net/netfilter/nf_tables_api.c
++++ b/net/netfilter/nf_tables_api.c
+@@ -4250,6 +4250,7 @@ static int nft_flush_set(const struct nf
+ }
+ set->ndeact++;
+
++ nft_set_elem_deactivate(ctx->net, set, elem);
+ nft_trans_elem_set(trans) = set;
+ nft_trans_elem(trans) = *elem;
+ list_add_tail(&trans->list, &ctx->net->nft.commit_list);
--- /dev/null
+From foo@baz Mon Oct 8 17:56:31 CEST 2018
+From: Martin Willi <martin@strongswan.org>
+Date: Wed, 22 Aug 2018 10:27:17 +0200
+Subject: netfilter: xt_cluster: add dependency on conntrack module
+
+From: Martin Willi <martin@strongswan.org>
+
+[ Upstream commit c1dc2912059901f97345d9e10c96b841215fdc0f ]
+
+The cluster match requires conntrack for matching packets. If the
+netns does not have conntrack hooks registered, the match does not
+work at all.
+
+Implicitly load the conntrack hook for the family, exactly as many
+other extensions do. This ensures that the match works even if the
+hooks have not been registered by other means.
+
+Signed-off-by: Martin Willi <martin@strongswan.org>
+Acked-by: Florian Westphal <fw@strlen.de>
+Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
+Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ net/netfilter/xt_cluster.c | 14 +++++++++++++-
+ 1 file changed, 13 insertions(+), 1 deletion(-)
+
+--- a/net/netfilter/xt_cluster.c
++++ b/net/netfilter/xt_cluster.c
+@@ -133,6 +133,7 @@ xt_cluster_mt(const struct sk_buff *skb,
+ static int xt_cluster_mt_checkentry(const struct xt_mtchk_param *par)
+ {
+ struct xt_cluster_match_info *info = par->matchinfo;
++ int ret;
+
+ if (info->total_nodes > XT_CLUSTER_NODES_MAX) {
+ pr_info("you have exceeded the maximum "
+@@ -145,7 +146,17 @@ static int xt_cluster_mt_checkentry(cons
+ "higher than the total number of nodes\n");
+ return -EDOM;
+ }
+- return 0;
++
++ ret = nf_ct_netns_get(par->net, par->family);
++ if (ret < 0)
++ pr_info_ratelimited("cannot load conntrack support for proto=%u\n",
++ par->family);
++ return ret;
++}
++
++static void xt_cluster_mt_destroy(const struct xt_mtdtor_param *par)
++{
++ nf_ct_netns_put(par->net, par->family);
+ }
+
+ static struct xt_match xt_cluster_match __read_mostly = {
+@@ -154,6 +165,7 @@ static struct xt_match xt_cluster_match
+ .match = xt_cluster_mt,
+ .checkentry = xt_cluster_mt_checkentry,
+ .matchsize = sizeof(struct xt_cluster_match_info),
++ .destroy = xt_cluster_mt_destroy,
+ .me = THIS_MODULE,
+ };
+
--- /dev/null
+From foo@baz Mon Oct 8 17:56:31 CEST 2018
+From: Sagi Grimberg <sagi@grimberg.me>
+Date: Mon, 3 Sep 2018 03:47:07 -0700
+Subject: nvmet-rdma: fix possible bogus dereference under heavy load
+
+From: Sagi Grimberg <sagi@grimberg.me>
+
+[ Upstream commit 8407879c4e0d7731f6e7e905893cecf61a7762c7 ]
+
+Currently we always repost the recv buffer before we send a response
+capsule back to the host. Since ordering is not guaranteed for send
+and recv completions, it is posible that we will receive a new request
+from the host before we got a send completion for the response capsule.
+
+Today, we pre-allocate 2x rsps the length of the queue, but in reality,
+under heavy load there is nothing that is really preventing the gap to
+expand until we exhaust all our rsps.
+
+To fix this, if we don't have any pre-allocated rsps left, we dynamically
+allocate a rsp and make sure to free it when we are done. If under memory
+pressure we fail to allocate a rsp, we silently drop the command and
+wait for the host to retry.
+
+Reported-by: Steve Wise <swise@opengridcomputing.com>
+Tested-by: Steve Wise <swise@opengridcomputing.com>
+Signed-off-by: Sagi Grimberg <sagi@grimberg.me>
+[hch: dropped a superflous assignment]
+Signed-off-by: Christoph Hellwig <hch@lst.de>
+Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/nvme/target/rdma.c | 27 +++++++++++++++++++++++++--
+ 1 file changed, 25 insertions(+), 2 deletions(-)
+
+--- a/drivers/nvme/target/rdma.c
++++ b/drivers/nvme/target/rdma.c
+@@ -65,6 +65,7 @@ struct nvmet_rdma_rsp {
+
+ struct nvmet_req req;
+
++ bool allocated;
+ u8 n_rdma;
+ u32 flags;
+ u32 invalidate_rkey;
+@@ -167,11 +168,19 @@ nvmet_rdma_get_rsp(struct nvmet_rdma_que
+ unsigned long flags;
+
+ spin_lock_irqsave(&queue->rsps_lock, flags);
+- rsp = list_first_entry(&queue->free_rsps,
++ rsp = list_first_entry_or_null(&queue->free_rsps,
+ struct nvmet_rdma_rsp, free_list);
+- list_del(&rsp->free_list);
++ if (likely(rsp))
++ list_del(&rsp->free_list);
+ spin_unlock_irqrestore(&queue->rsps_lock, flags);
+
++ if (unlikely(!rsp)) {
++ rsp = kmalloc(sizeof(*rsp), GFP_KERNEL);
++ if (unlikely(!rsp))
++ return NULL;
++ rsp->allocated = true;
++ }
++
+ return rsp;
+ }
+
+@@ -180,6 +189,11 @@ nvmet_rdma_put_rsp(struct nvmet_rdma_rsp
+ {
+ unsigned long flags;
+
++ if (rsp->allocated) {
++ kfree(rsp);
++ return;
++ }
++
+ spin_lock_irqsave(&rsp->queue->rsps_lock, flags);
+ list_add_tail(&rsp->free_list, &rsp->queue->free_rsps);
+ spin_unlock_irqrestore(&rsp->queue->rsps_lock, flags);
+@@ -756,6 +770,15 @@ static void nvmet_rdma_recv_done(struct
+
+ cmd->queue = queue;
+ rsp = nvmet_rdma_get_rsp(queue);
++ if (unlikely(!rsp)) {
++ /*
++ * we get here only under memory pressure,
++ * silently drop and have the host retry
++ * as we can't even fail it.
++ */
++ nvmet_rdma_post_recv(queue->dev, cmd);
++ return;
++ }
+ rsp->queue = queue;
+ rsp->cmd = cmd;
+ rsp->flags = 0;
--- /dev/null
+From foo@baz Mon Oct 8 17:56:31 CEST 2018
+From: Hisao Tanabe <xtanabe@gmail.com>
+Date: Sat, 25 Aug 2018 00:45:56 +0900
+Subject: perf evsel: Fix potential null pointer dereference in perf_evsel__new_idx()
+
+From: Hisao Tanabe <xtanabe@gmail.com>
+
+[ Upstream commit fd8d2702791a970c751f8b526a17d8e725a05b46 ]
+
+If evsel is NULL, we should return NULL to avoid a NULL pointer
+dereference a bit later in the code.
+
+Signed-off-by: Hisao Tanabe <xtanabe@gmail.com>
+Acked-by: Namhyung Kim <namhyung@kernel.org>
+Cc: Jiri Olsa <jolsa@redhat.com>
+Cc: Wang Nan <wangnan0@huawei.com>
+Fixes: 03e0a7df3efd ("perf tools: Introduce bpf-output event")
+LPU-Reference: 20180824154556.23428-1-xtanabe@gmail.com
+Link: https://lkml.kernel.org/n/tip-e5plzjhx6595a5yjaf22jss3@git.kernel.org
+Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
+Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ tools/perf/util/evsel.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+--- a/tools/perf/util/evsel.c
++++ b/tools/perf/util/evsel.c
+@@ -259,8 +259,9 @@ struct perf_evsel *perf_evsel__new_idx(s
+ {
+ struct perf_evsel *evsel = zalloc(perf_evsel__object.size);
+
+- if (evsel != NULL)
+- perf_evsel__init(evsel, attr, idx);
++ if (!evsel)
++ return NULL;
++ perf_evsel__init(evsel, attr, idx);
+
+ if (perf_evsel__is_bpf_output(evsel)) {
+ evsel->attr.sample_type |= (PERF_SAMPLE_RAW | PERF_SAMPLE_TIME |
--- /dev/null
+From foo@baz Mon Oct 8 17:56:31 CEST 2018
+From: Sandipan Das <sandipan@linux.ibm.com>
+Date: Tue, 28 Aug 2018 14:38:48 +0530
+Subject: perf probe powerpc: Ignore SyS symbols irrespective of endianness
+
+From: Sandipan Das <sandipan@linux.ibm.com>
+
+[ Upstream commit fa694160cca6dbba17c57dc7efec5f93feaf8795 ]
+
+This makes sure that the SyS symbols are ignored for any powerpc system,
+not just the big endian ones.
+
+Reported-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
+Signed-off-by: Sandipan Das <sandipan@linux.ibm.com>
+Reviewed-by: Kamalesh Babulal <kamalesh@linux.vnet.ibm.com>
+Acked-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
+Cc: Jiri Olsa <jolsa@redhat.com>
+Cc: Ravi Bangoria <ravi.bangoria@linux.ibm.com>
+Fixes: fb6d59423115 ("perf probe ppc: Use the right prefix when ignoring SyS symbols on ppc")
+Link: http://lkml.kernel.org/r/20180828090848.1914-1-sandipan@linux.ibm.com
+Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
+Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ tools/perf/arch/powerpc/util/sym-handling.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+--- a/tools/perf/arch/powerpc/util/sym-handling.c
++++ b/tools/perf/arch/powerpc/util/sym-handling.c
+@@ -22,15 +22,16 @@ bool elf__needs_adjust_symbols(GElf_Ehdr
+
+ #endif
+
+-#if !defined(_CALL_ELF) || _CALL_ELF != 2
+ int arch__choose_best_symbol(struct symbol *syma,
+ struct symbol *symb __maybe_unused)
+ {
+ char *sym = syma->name;
+
++#if !defined(_CALL_ELF) || _CALL_ELF != 2
+ /* Skip over any initial dot */
+ if (*sym == '.')
+ sym++;
++#endif
+
+ /* Avoid "SyS" kernel syscall aliases */
+ if (strlen(sym) >= 3 && !strncmp(sym, "SyS", 3))
+@@ -41,6 +42,7 @@ int arch__choose_best_symbol(struct symb
+ return SYMBOL_A;
+ }
+
++#if !defined(_CALL_ELF) || _CALL_ELF != 2
+ /* Allow matching against dot variants */
+ int arch__compare_symbol_names(const char *namea, const char *nameb)
+ {
--- /dev/null
+From foo@baz Mon Oct 8 17:56:31 CEST 2018
+From: Chris Phlipot <cphlipot0@gmail.com>
+Date: Tue, 28 Aug 2018 23:19:54 -0700
+Subject: perf util: Fix bad memory access in trace info.
+
+From: Chris Phlipot <cphlipot0@gmail.com>
+
+[ Upstream commit a72f64261359b7451f8478f2a2bf357b4e6c757f ]
+
+In the write to the output_fd in the error condition of
+record_saved_cmdline(), we are writing 8 bytes from a memory location on
+the stack that contains a primitive that is only 4 bytes in size.
+Change the primitive to 8 bytes in size to match the size of the write
+in order to avoid reading unknown memory from the stack.
+
+Signed-off-by: Chris Phlipot <cphlipot0@gmail.com>
+Cc: Namhyung Kim <namhyung@kernel.org>
+Cc: Peter Zijlstra <peterz@infradead.org>
+Link: http://lkml.kernel.org/r/20180829061954.18871-1-cphlipot0@gmail.com
+Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
+Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ tools/perf/util/trace-event-info.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/tools/perf/util/trace-event-info.c
++++ b/tools/perf/util/trace-event-info.c
+@@ -379,7 +379,7 @@ out:
+
+ static int record_saved_cmdline(void)
+ {
+- unsigned int size;
++ unsigned long long size;
+ char *path;
+ struct stat st;
+ int ret, err = 0;
--- /dev/null
+From foo@baz Mon Oct 8 17:56:31 CEST 2018
+From: Jacek Tomaka <jacek.tomaka@poczta.fm>
+Date: Thu, 2 Aug 2018 09:38:30 +0800
+Subject: perf/x86/intel: Add support/quirk for the MISPREDICT bit on Knights Landing CPUs
+
+From: Jacek Tomaka <jacek.tomaka@poczta.fm>
+
+[ Upstream commit 16160c1946b702dcfa95ef63389a56deb2f1c7cb ]
+
+Problem: perf did not show branch predicted/mispredicted bit in brstack.
+
+Output of perf -F brstack for profile collected
+
+Before:
+
+ 0x4fdbcd/0x4fdc03/-/-/-/0
+ 0x45f4c1/0x4fdba0/-/-/-/0
+ 0x45f544/0x45f4bb/-/-/-/0
+ 0x45f555/0x45f53c/-/-/-/0
+ 0x7f66901cc24b/0x45f555/-/-/-/0
+ 0x7f66901cc22e/0x7f66901cc23d/-/-/-/0
+ 0x7f66901cc1ff/0x7f66901cc20f/-/-/-/0
+ 0x7f66901cc1e8/0x7f66901cc1fc/-/-/-/0
+
+After:
+
+ 0x4fdbcd/0x4fdc03/P/-/-/0
+ 0x45f4c1/0x4fdba0/P/-/-/0
+ 0x45f544/0x45f4bb/P/-/-/0
+ 0x45f555/0x45f53c/P/-/-/0
+ 0x7f66901cc24b/0x45f555/P/-/-/0
+ 0x7f66901cc22e/0x7f66901cc23d/P/-/-/0
+ 0x7f66901cc1ff/0x7f66901cc20f/P/-/-/0
+ 0x7f66901cc1e8/0x7f66901cc1fc/P/-/-/0
+
+Cause:
+
+As mentioned in Software Development Manual vol 3, 17.4.8.1,
+IA32_PERF_CAPABILITIES[5:0] indicates the format of the address that is
+stored in the LBR stack. Knights Landing reports 1 (LBR_FORMAT_LIP) as
+its format. Despite that, registers containing FROM address of the branch,
+do have MISPREDICT bit but because of the format indicated in
+IA32_PERF_CAPABILITIES[5:0], LBR did not read MISPREDICT bit.
+
+Solution:
+
+Teach LBR about above Knights Landing quirk and make it read MISPREDICT bit.
+
+Signed-off-by: Jacek Tomaka <jacek.tomaka@poczta.fm>
+Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
+Cc: Linus Torvalds <torvalds@linux-foundation.org>
+Cc: Peter Zijlstra <peterz@infradead.org>
+Cc: Thomas Gleixner <tglx@linutronix.de>
+Link: http://lkml.kernel.org/r/20180802013830.10600-1-jacekt@dugeo.com
+Signed-off-by: Ingo Molnar <mingo@kernel.org>
+Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ arch/x86/events/intel/lbr.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+--- a/arch/x86/events/intel/lbr.c
++++ b/arch/x86/events/intel/lbr.c
+@@ -1250,4 +1250,8 @@ void intel_pmu_lbr_init_knl(void)
+
+ x86_pmu.lbr_sel_mask = LBR_SEL_MASK;
+ x86_pmu.lbr_sel_map = snb_lbr_sel_map;
++
++ /* Knights Landing does have MISPREDICT bit */
++ if (x86_pmu.intel_cap.lbr_format == LBR_FORMAT_LIP)
++ x86_pmu.intel_cap.lbr_format = LBR_FORMAT_EIP_FLAGS;
+ }
--- /dev/null
+From foo@baz Mon Oct 8 17:56:31 CEST 2018
+From: Stephen Boyd <swboyd@chromium.org>
+Date: Thu, 16 Aug 2018 13:06:46 -0700
+Subject: pinctrl: msm: Really mask level interrupts to prevent latching
+
+From: Stephen Boyd <swboyd@chromium.org>
+
+[ Upstream commit b55326dc969ea2d704a008d9a97583b128f54f4f ]
+
+The interrupt controller hardware in this pin controller has two status
+enable bits. The first "normal" status enable bit enables or disables
+the summary interrupt line being raised when a gpio interrupt triggers
+and the "raw" status enable bit allows or prevents the hardware from
+latching an interrupt into the status register for a gpio interrupt.
+Currently we just toggle the "normal" status enable bit in the mask and
+unmask ops so that the summary irq interrupt going to the CPU's
+interrupt controller doesn't trigger for the masked gpio interrupt.
+
+For a level triggered interrupt, the flow would be as follows: the pin
+controller sees the interrupt, latches the status into the status
+register, raises the summary irq to the CPU, summary irq handler runs
+and calls handle_level_irq(), handle_level_irq() masks and acks the gpio
+interrupt, the interrupt handler runs, and finally unmask the interrupt.
+When the interrupt handler completes, we expect that the interrupt line
+level will go back to the deasserted state so the genirq code can unmask
+the interrupt without it triggering again.
+
+If we only mask the interrupt by clearing the "normal" status enable bit
+then we'll ack the interrupt but it will continue to show up as pending
+in the status register because the raw status bit is enabled, the
+hardware hasn't deasserted the line, and thus the asserted state latches
+into the status register again. When the hardware deasserts the
+interrupt the pin controller still thinks there is a pending unserviced
+level interrupt because it latched it earlier. This behavior causes
+software to see an extra interrupt for level type interrupts each time
+the interrupt is handled.
+
+Let's fix this by clearing the raw status enable bit for level type
+interrupts so that the hardware stops latching the status of the
+interrupt after we ack it. We don't do this for edge type interrupts
+because it seems that toggling the raw status enable bit for edge type
+interrupts causes spurious edge interrupts.
+
+Signed-off-by: Stephen Boyd <swboyd@chromium.org>
+Reviewed-by: Douglas Anderson <dianders@chromium.org>
+Reviewed-by: Bjorn Andersson <bjorn.andersson@linaro.org>
+Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
+Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/pinctrl/qcom/pinctrl-msm.c | 24 ++++++++++++++++++++++++
+ 1 file changed, 24 insertions(+)
+
+--- a/drivers/pinctrl/qcom/pinctrl-msm.c
++++ b/drivers/pinctrl/qcom/pinctrl-msm.c
+@@ -610,6 +610,29 @@ static void msm_gpio_irq_mask(struct irq
+ raw_spin_lock_irqsave(&pctrl->lock, flags);
+
+ val = readl(pctrl->regs + g->intr_cfg_reg);
++ /*
++ * There are two bits that control interrupt forwarding to the CPU. The
++ * RAW_STATUS_EN bit causes the level or edge sensed on the line to be
++ * latched into the interrupt status register when the hardware detects
++ * an irq that it's configured for (either edge for edge type or level
++ * for level type irq). The 'non-raw' status enable bit causes the
++ * hardware to assert the summary interrupt to the CPU if the latched
++ * status bit is set. There's a bug though, the edge detection logic
++ * seems to have a problem where toggling the RAW_STATUS_EN bit may
++ * cause the status bit to latch spuriously when there isn't any edge
++ * so we can't touch that bit for edge type irqs and we have to keep
++ * the bit set anyway so that edges are latched while the line is masked.
++ *
++ * To make matters more complicated, leaving the RAW_STATUS_EN bit
++ * enabled all the time causes level interrupts to re-latch into the
++ * status register because the level is still present on the line after
++ * we ack it. We clear the raw status enable bit during mask here and
++ * set the bit on unmask so the interrupt can't latch into the hardware
++ * while it's masked.
++ */
++ if (irqd_get_trigger_type(d) & IRQ_TYPE_LEVEL_MASK)
++ val &= ~BIT(g->intr_raw_status_bit);
++
+ val &= ~BIT(g->intr_enable_bit);
+ writel(val, pctrl->regs + g->intr_cfg_reg);
+
+@@ -631,6 +654,7 @@ static void msm_gpio_irq_unmask(struct i
+ raw_spin_lock_irqsave(&pctrl->lock, flags);
+
+ val = readl(pctrl->regs + g->intr_cfg_reg);
++ val |= BIT(g->intr_raw_status_bit);
+ val |= BIT(g->intr_enable_bit);
+ writel(val, pctrl->regs + g->intr_cfg_reg);
+
--- /dev/null
+From foo@baz Mon Oct 8 17:56:31 CEST 2018
+From: Kai-Heng Feng <kai.heng.feng@canonical.com>
+Date: Tue, 11 Sep 2018 01:51:43 +0800
+Subject: r8169: Clear RTL_FLAG_TASK_*_PENDING when clearing RTL_FLAG_TASK_ENABLED
+
+From: Kai-Heng Feng <kai.heng.feng@canonical.com>
+
+[ Upstream commit 6ad569019999300afd8e614d296fdc356550b77f ]
+
+After system suspend, sometimes the r8169 doesn't work when ethernet
+cable gets pluggued.
+
+This issue happens because rtl_reset_work() doesn't get called from
+rtl8169_runtime_resume(), after system suspend.
+
+In rtl_task(), RTL_FLAG_TASK_* only gets cleared if this condition is
+met:
+if (!netif_running(dev) ||
+ !test_bit(RTL_FLAG_TASK_ENABLED, tp->wk.flags))
+ ...
+
+If RTL_FLAG_TASK_ENABLED was cleared during system suspend while
+RTL_FLAG_TASK_RESET_PENDING was set, the next rtl_schedule_task() won't
+schedule task as the flag is still there.
+
+So in addition to clearing RTL_FLAG_TASK_ENABLED, also clears other
+flags.
+
+Cc: Heiner Kallweit <hkallweit1@gmail.com>
+Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/net/ethernet/realtek/r8169.c | 9 ++++++---
+ 1 file changed, 6 insertions(+), 3 deletions(-)
+
+--- a/drivers/net/ethernet/realtek/r8169.c
++++ b/drivers/net/ethernet/realtek/r8169.c
+@@ -760,7 +760,7 @@ struct rtl8169_tc_offsets {
+ };
+
+ enum rtl_flag {
+- RTL_FLAG_TASK_ENABLED,
++ RTL_FLAG_TASK_ENABLED = 0,
+ RTL_FLAG_TASK_SLOW_PENDING,
+ RTL_FLAG_TASK_RESET_PENDING,
+ RTL_FLAG_TASK_PHY_PENDING,
+@@ -7657,7 +7657,8 @@ static int rtl8169_close(struct net_devi
+ rtl8169_update_counters(dev);
+
+ rtl_lock_work(tp);
+- clear_bit(RTL_FLAG_TASK_ENABLED, tp->wk.flags);
++ /* Clear all task flags */
++ bitmap_zero(tp->wk.flags, RTL_FLAG_MAX);
+
+ rtl8169_down(dev);
+ rtl_unlock_work(tp);
+@@ -7838,7 +7839,9 @@ static void rtl8169_net_suspend(struct n
+
+ rtl_lock_work(tp);
+ napi_disable(&tp->napi);
+- clear_bit(RTL_FLAG_TASK_ENABLED, tp->wk.flags);
++ /* Clear all task flags */
++ bitmap_zero(tp->wk.flags, RTL_FLAG_MAX);
++
+ rtl_unlock_work(tp);
+
+ rtl_pll_power_down(tp);
--- /dev/null
+From foo@baz Mon Oct 8 17:56:31 CEST 2018
+From: Jann Horn <jannh@google.com>
+Date: Mon, 3 Sep 2018 18:54:14 +0200
+Subject: RDMA/ucma: check fd type in ucma_migrate_id()
+
+From: Jann Horn <jannh@google.com>
+
+[ Upstream commit 0d23ba6034b9cf48b8918404367506da3e4b3ee5 ]
+
+The current code grabs the private_data of whatever file descriptor
+userspace has supplied and implicitly casts it to a `struct ucma_file *`,
+potentially causing a type confusion.
+
+This is probably fine in practice because the pointer is only used for
+comparisons, it is never actually dereferenced; and even in the
+comparisons, it is unlikely that a file from another filesystem would have
+a ->private_data pointer that happens to also be valid in this context.
+But ->private_data is not always guaranteed to be a valid pointer to an
+object owned by the file's filesystem; for example, some filesystems just
+cram numbers in there.
+
+Check the type of the supplied file descriptor to be safe, analogous to how
+other places in the kernel do it.
+
+Fixes: 88314e4dda1e ("RDMA/cma: add support for rdma_migrate_id()")
+Signed-off-by: Jann Horn <jannh@google.com>
+Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
+Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/infiniband/core/ucma.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+--- a/drivers/infiniband/core/ucma.c
++++ b/drivers/infiniband/core/ucma.c
+@@ -124,6 +124,8 @@ static DEFINE_MUTEX(mut);
+ static DEFINE_IDR(ctx_idr);
+ static DEFINE_IDR(multicast_idr);
+
++static const struct file_operations ucma_fops;
++
+ static inline struct ucma_context *_ucma_find_context(int id,
+ struct ucma_file *file)
+ {
+@@ -1564,6 +1566,10 @@ static ssize_t ucma_migrate_id(struct uc
+ f = fdget(cmd.fd);
+ if (!f.file)
+ return -ENOENT;
++ if (f.file->f_op != &ucma_fops) {
++ ret = -EINVAL;
++ goto file_put;
++ }
+
+ /* Validate current fd and prevent destruction of id. */
+ ctx = ucma_get_ctx(f.file->private_data, cmd.id);
--- /dev/null
+From foo@baz Mon Oct 8 17:56:31 CEST 2018
+From: Matt Ranostay <matt.ranostay@konsulko.com>
+Date: Sat, 25 Aug 2018 02:00:48 -0700
+Subject: Revert "iio: temperature: maxim_thermocouple: add MAX31856 part"
+
+From: Matt Ranostay <matt.ranostay@konsulko.com>
+
+[ Upstream commit 65099ea85e885c3ea1272eca8774b771419d8ce8 ]
+
+This reverts commit 535fba29b3e1afef4ba201b3c69a6992583ec0bd.
+
+Seems the submitter (er me, hang head in shame) didn't look at the datasheet
+enough to see that the registers are quite different.
+
+This needs to be reverted because a) would never work b) to open it be added
+to a Maxim RTDs (Resistance Temperature Detectors) under development by author
+
+Signed-off-by: Matt Ranostay <matt.ranostay@konsulko.com>
+Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
+Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/iio/temperature/maxim_thermocouple.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+--- a/drivers/iio/temperature/maxim_thermocouple.c
++++ b/drivers/iio/temperature/maxim_thermocouple.c
+@@ -267,7 +267,6 @@ static int maxim_thermocouple_remove(str
+ static const struct spi_device_id maxim_thermocouple_id[] = {
+ {"max6675", MAX6675},
+ {"max31855", MAX31855},
+- {"max31856", MAX31855},
+ {},
+ };
+ MODULE_DEVICE_TABLE(spi, maxim_thermocouple_id);
--- /dev/null
+From foo@baz Mon Oct 8 17:56:31 CEST 2018
+From: Julian Wiedmann <jwi@linux.ibm.com>
+Date: Wed, 12 Sep 2018 15:31:35 +0200
+Subject: s390/qeth: don't dump past end of unknown HW header
+
+From: Julian Wiedmann <jwi@linux.ibm.com>
+
+[ Upstream commit 0ac1487c4b2de383b91ecad1be561b8f7a2c15f4 ]
+
+For inbound data with an unsupported HW header format, only dump the
+actual HW header. We have no idea how much payload follows it, and what
+it contains. Worst case, we dump past the end of the Inbound Buffer and
+access whatever is located next in memory.
+
+Signed-off-by: Julian Wiedmann <jwi@linux.ibm.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/s390/net/qeth_l2_main.c | 2 +-
+ drivers/s390/net/qeth_l3_main.c | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+--- a/drivers/s390/net/qeth_l2_main.c
++++ b/drivers/s390/net/qeth_l2_main.c
+@@ -484,7 +484,7 @@ static int qeth_l2_process_inbound_buffe
+ default:
+ dev_kfree_skb_any(skb);
+ QETH_CARD_TEXT(card, 3, "inbunkno");
+- QETH_DBF_HEX(CTRL, 3, hdr, QETH_DBF_CTRL_LEN);
++ QETH_DBF_HEX(CTRL, 3, hdr, sizeof(*hdr));
+ continue;
+ }
+ work_done++;
+--- a/drivers/s390/net/qeth_l3_main.c
++++ b/drivers/s390/net/qeth_l3_main.c
+@@ -1793,7 +1793,7 @@ static int qeth_l3_process_inbound_buffe
+ default:
+ dev_kfree_skb_any(skb);
+ QETH_CARD_TEXT(card, 3, "inbunkno");
+- QETH_DBF_HEX(CTRL, 3, hdr, QETH_DBF_CTRL_LEN);
++ QETH_DBF_HEX(CTRL, 3, hdr, sizeof(*hdr));
+ continue;
+ }
+ work_done++;
--- /dev/null
+From foo@baz Mon Oct 8 17:56:31 CEST 2018
+From: Wenjia Zhang <wenjia@linux.ibm.com>
+Date: Wed, 12 Sep 2018 15:31:34 +0200
+Subject: s390/qeth: use vzalloc for QUERY OAT buffer
+
+From: Wenjia Zhang <wenjia@linux.ibm.com>
+
+[ Upstream commit aec45e857c5538664edb76a60dd452e3265f37d1 ]
+
+qeth_query_oat_command() currently allocates the kernel buffer for
+the SIOC_QETH_QUERY_OAT ioctl with kzalloc. So on systems with
+fragmented memory, large allocations may fail (eg. the qethqoat tool by
+default uses 132KB).
+
+Solve this issue by using vzalloc, backing the allocation with
+non-contiguous memory.
+
+Signed-off-by: Wenjia Zhang <wenjia@linux.ibm.com>
+Reviewed-by: Julian Wiedmann <jwi@linux.ibm.com>
+Signed-off-by: Julian Wiedmann <jwi@linux.ibm.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/s390/net/qeth_core_main.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+--- a/drivers/s390/net/qeth_core_main.c
++++ b/drivers/s390/net/qeth_core_main.c
+@@ -23,6 +23,7 @@
+ #include <linux/netdevice.h>
+ #include <linux/netdev_features.h>
+ #include <linux/skbuff.h>
++#include <linux/vmalloc.h>
+
+ #include <net/iucv/af_iucv.h>
+ #include <net/dsfield.h>
+@@ -4728,7 +4729,7 @@ static int qeth_query_oat_command(struct
+
+ priv.buffer_len = oat_data.buffer_len;
+ priv.response_len = 0;
+- priv.buffer = kzalloc(oat_data.buffer_len, GFP_KERNEL);
++ priv.buffer = vzalloc(oat_data.buffer_len);
+ if (!priv.buffer) {
+ rc = -ENOMEM;
+ goto out;
+@@ -4769,7 +4770,7 @@ static int qeth_query_oat_command(struct
+ rc = -EFAULT;
+
+ out_free:
+- kfree(priv.buffer);
++ vfree(priv.buffer);
+ out:
+ return rc;
+ }
--- /dev/null
+From foo@baz Mon Oct 8 17:56:31 CEST 2018
+From: Vincent Pelletier <plr.vincent@gmail.com>
+Date: Mon, 27 Aug 2018 14:45:15 -0500
+Subject: scsi: iscsi: target: Set conn->sess to NULL when iscsi_login_set_conn_values fails
+
+From: Vincent Pelletier <plr.vincent@gmail.com>
+
+[ Upstream commit 7915919bb94e12460c58e27c708472e6f85f6699 ]
+
+Fixes a use-after-free reported by KASAN when later
+iscsi_target_login_sess_out gets called and it tries to access
+conn->sess->se_sess:
+
+Disabling lock debugging due to kernel taint
+iSCSI Login timeout on Network Portal [::]:3260
+iSCSI Login negotiation failed.
+==================================================================
+BUG: KASAN: use-after-free in
+iscsi_target_login_sess_out.cold.12+0x58/0xff [iscsi_target_mod]
+Read of size 8 at addr ffff880109d070c8 by task iscsi_np/980
+
+CPU: 1 PID: 980 Comm: iscsi_np Tainted: G O
+4.17.8kasan.sess.connops+ #4
+Hardware name: To be filled by O.E.M. To be filled by O.E.M./Aptio CRB,
+BIOS 5.6.5 05/19/2014
+Call Trace:
+ dump_stack+0x71/0xac
+ print_address_description+0x65/0x22e
+ ? iscsi_target_login_sess_out.cold.12+0x58/0xff [iscsi_target_mod]
+ kasan_report.cold.6+0x241/0x2fd
+ iscsi_target_login_sess_out.cold.12+0x58/0xff [iscsi_target_mod]
+ iscsi_target_login_thread+0x1086/0x1710 [iscsi_target_mod]
+ ? __sched_text_start+0x8/0x8
+ ? iscsi_target_login_sess_out+0x250/0x250 [iscsi_target_mod]
+ ? __kthread_parkme+0xcc/0x100
+ ? parse_args.cold.14+0xd3/0xd3
+ ? iscsi_target_login_sess_out+0x250/0x250 [iscsi_target_mod]
+ kthread+0x1a0/0x1c0
+ ? kthread_bind+0x30/0x30
+ ret_from_fork+0x35/0x40
+
+Allocated by task 980:
+ kasan_kmalloc+0xbf/0xe0
+ kmem_cache_alloc_trace+0x112/0x210
+ iscsi_target_login_thread+0x816/0x1710 [iscsi_target_mod]
+ kthread+0x1a0/0x1c0
+ ret_from_fork+0x35/0x40
+
+Freed by task 980:
+ __kasan_slab_free+0x125/0x170
+ kfree+0x90/0x1d0
+ iscsi_target_login_thread+0x1577/0x1710 [iscsi_target_mod]
+ kthread+0x1a0/0x1c0
+ ret_from_fork+0x35/0x40
+
+The buggy address belongs to the object at ffff880109d06f00
+ which belongs to the cache kmalloc-512 of size 512
+The buggy address is located 456 bytes inside of
+ 512-byte region [ffff880109d06f00, ffff880109d07100)
+The buggy address belongs to the page:
+page:ffffea0004274180 count:1 mapcount:0 mapping:0000000000000000
+index:0x0 compound_mapcount: 0
+flags: 0x17fffc000008100(slab|head)
+raw: 017fffc000008100 0000000000000000 0000000000000000 00000001000c000c
+raw: dead000000000100 dead000000000200 ffff88011b002e00 0000000000000000
+page dumped because: kasan: bad access detected
+
+Memory state around the buggy address:
+ ffff880109d06f80: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
+ ffff880109d07000: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
+>ffff880109d07080: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
+ ^
+ ffff880109d07100: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
+ ffff880109d07180: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+==================================================================
+
+Signed-off-by: Vincent Pelletier <plr.vincent@gmail.com>
+[rebased against idr/ida changes and to handle ret review comments from Matthew]
+Signed-off-by: Mike Christie <mchristi@redhat.com>
+Cc: Matthew Wilcox <willy@infradead.org>
+Reviewed-by: Matthew Wilcox <willy@infradead.org>
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/target/iscsi/iscsi_target_login.c | 8 +++-----
+ 1 file changed, 3 insertions(+), 5 deletions(-)
+
+--- a/drivers/target/iscsi/iscsi_target_login.c
++++ b/drivers/target/iscsi/iscsi_target_login.c
+@@ -310,11 +310,9 @@ static int iscsi_login_zero_tsih_s1(
+ return -ENOMEM;
+ }
+
+- ret = iscsi_login_set_conn_values(sess, conn, pdu->cid);
+- if (unlikely(ret)) {
+- kfree(sess);
+- return ret;
+- }
++ if (iscsi_login_set_conn_values(sess, conn, pdu->cid))
++ goto free_sess;
++
+ sess->init_task_tag = pdu->itt;
+ memcpy(&sess->isid, pdu->isid, 6);
+ sess->exp_cmd_sn = be32_to_cpu(pdu->cmdsn);
--- /dev/null
+From foo@baz Mon Oct 8 17:56:31 CEST 2018
+From: Nilesh Javali <nilesh.javali@cavium.com>
+Date: Wed, 29 Aug 2018 23:55:53 -0700
+Subject: scsi: qedi: Add the CRC size within iSCSI NVM image
+
+From: Nilesh Javali <nilesh.javali@cavium.com>
+
+[ Upstream commit c77a2fa3ff8f73d1a485e67e6f81c64823739d59 ]
+
+The QED driver commit, 1ac4329a1cff ("qed: Add configuration information
+to register dump and debug data"), removes the CRC length validation
+causing nvm_get_image failure while loading qedi driver:
+
+[qed_mcp_get_nvm_image:2700(host_10-0)]Image [0] is too big - 00006008 bytes
+where only 00006004 are available
+[qedi_get_boot_info:2253]:10: Could not get NVM image. ret = -12
+
+Hence add and adjust the CRC size to iSCSI NVM image to read boot info at
+qedi load time.
+
+Signed-off-by: Nilesh Javali <nilesh.javali@cavium.com>
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/scsi/qedi/qedi.h | 7 ++++++-
+ drivers/scsi/qedi/qedi_main.c | 28 +++++++++++++++-------------
+ 2 files changed, 21 insertions(+), 14 deletions(-)
+
+--- a/drivers/scsi/qedi/qedi.h
++++ b/drivers/scsi/qedi/qedi.h
+@@ -77,6 +77,11 @@ enum qedi_nvm_tgts {
+ QEDI_NVM_TGT_SEC,
+ };
+
++struct qedi_nvm_iscsi_image {
++ struct nvm_iscsi_cfg iscsi_cfg;
++ u32 crc;
++};
++
+ struct qedi_uio_ctrl {
+ /* meta data */
+ u32 uio_hsi_version;
+@@ -294,7 +299,7 @@ struct qedi_ctx {
+ void *bdq_pbl_list;
+ dma_addr_t bdq_pbl_list_dma;
+ u8 bdq_pbl_list_num_entries;
+- struct nvm_iscsi_cfg *iscsi_cfg;
++ struct qedi_nvm_iscsi_image *iscsi_image;
+ dma_addr_t nvm_buf_dma;
+ void __iomem *bdq_primary_prod;
+ void __iomem *bdq_secondary_prod;
+--- a/drivers/scsi/qedi/qedi_main.c
++++ b/drivers/scsi/qedi/qedi_main.c
+@@ -1147,23 +1147,26 @@ exit_setup_int:
+
+ static void qedi_free_nvm_iscsi_cfg(struct qedi_ctx *qedi)
+ {
+- if (qedi->iscsi_cfg)
++ if (qedi->iscsi_image)
+ dma_free_coherent(&qedi->pdev->dev,
+- sizeof(struct nvm_iscsi_cfg),
+- qedi->iscsi_cfg, qedi->nvm_buf_dma);
++ sizeof(struct qedi_nvm_iscsi_image),
++ qedi->iscsi_image, qedi->nvm_buf_dma);
+ }
+
+ static int qedi_alloc_nvm_iscsi_cfg(struct qedi_ctx *qedi)
+ {
+- qedi->iscsi_cfg = dma_zalloc_coherent(&qedi->pdev->dev,
+- sizeof(struct nvm_iscsi_cfg),
+- &qedi->nvm_buf_dma, GFP_KERNEL);
+- if (!qedi->iscsi_cfg) {
++ struct qedi_nvm_iscsi_image nvm_image;
++
++ qedi->iscsi_image = dma_zalloc_coherent(&qedi->pdev->dev,
++ sizeof(nvm_image),
++ &qedi->nvm_buf_dma,
++ GFP_KERNEL);
++ if (!qedi->iscsi_image) {
+ QEDI_ERR(&qedi->dbg_ctx, "Could not allocate NVM BUF.\n");
+ return -ENOMEM;
+ }
+ QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_INFO,
+- "NVM BUF addr=0x%p dma=0x%llx.\n", qedi->iscsi_cfg,
++ "NVM BUF addr=0x%p dma=0x%llx.\n", qedi->iscsi_image,
+ qedi->nvm_buf_dma);
+
+ return 0;
+@@ -1716,7 +1719,7 @@ qedi_get_nvram_block(struct qedi_ctx *qe
+ struct nvm_iscsi_block *block;
+
+ pf = qedi->dev_info.common.abs_pf_id;
+- block = &qedi->iscsi_cfg->block[0];
++ block = &qedi->iscsi_image->iscsi_cfg.block[0];
+ for (i = 0; i < NUM_OF_ISCSI_PF_SUPPORTED; i++, block++) {
+ flags = ((block->id) & NVM_ISCSI_CFG_BLK_CTRL_FLAG_MASK) >>
+ NVM_ISCSI_CFG_BLK_CTRL_FLAG_OFFSET;
+@@ -2008,15 +2011,14 @@ static void qedi_boot_release(void *data
+ static int qedi_get_boot_info(struct qedi_ctx *qedi)
+ {
+ int ret = 1;
+- u16 len;
+-
+- len = sizeof(struct nvm_iscsi_cfg);
++ struct qedi_nvm_iscsi_image nvm_image;
+
+ QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_INFO,
+ "Get NVM iSCSI CFG image\n");
+ ret = qedi_ops->common->nvm_get_image(qedi->cdev,
+ QED_NVM_IMAGE_ISCSI_CFG,
+- (char *)qedi->iscsi_cfg, len);
++ (char *)qedi->iscsi_image,
++ sizeof(nvm_image));
+ if (ret)
+ QEDI_ERR(&qedi->dbg_ctx,
+ "Could not get NVM image. ret = %d\n", ret);
tools-vm-page-types.c-fix-defined-but-not-used-warning.patch
mm-madvise-madv_dodump-allow-hugetlbfs-pages.patch
bpf-32-bit-rsh-verification-must-truncate-input-before-the-alu-op.patch
+netfilter-xt_cluster-add-dependency-on-conntrack-module.patch
+hid-add-support-for-apple-magic-keyboards.patch
+usb-gadget-fotg210-udc-fix-memory-leak-of-fotg210-ep.patch
+pinctrl-msm-really-mask-level-interrupts-to-prevent-latching.patch
+hid-hid-saitek-add-device-id-for-rat-7-contagion.patch
+scsi-iscsi-target-set-conn-sess-to-null-when-iscsi_login_set_conn_values-fails.patch
+scsi-qedi-add-the-crc-size-within-iscsi-nvm-image.patch
+perf-evsel-fix-potential-null-pointer-dereference-in-perf_evsel__new_idx.patch
+perf-util-fix-bad-memory-access-in-trace-info.patch
+perf-probe-powerpc-ignore-sys-symbols-irrespective-of-endianness.patch
+netfilter-nf_tables-release-chain-in-flushing-set.patch
+revert-iio-temperature-maxim_thermocouple-add-max31856-part.patch
+rdma-ucma-check-fd-type-in-ucma_migrate_id.patch
+hid-sensor-hub-restore-fixup-for-lenovo-thinkpad-helix-2-sensor-hub-report.patch
+usb-yurex-check-for-truncation-in-yurex_read.patch
+nvmet-rdma-fix-possible-bogus-dereference-under-heavy-load.patch
+net-mlx5-consider-pci-domain-in-search-for-next-dev.patch
+drm-nouveau-tbddevinit-don-t-fail-when-pmu-pre_os-is-missing-from-vbios.patch
+drm-nouveau-disp-fix-dp-disable-race.patch
+dm-raid-fix-rebuild-of-specific-devices-by-updating-superblock.patch
+fs-cifs-suppress-a-string-overflow-warning.patch
+net-ena-fix-driver-when-page_size-64kb.patch
+net-ena-fix-missing-calls-to-read_once.patch
+perf-x86-intel-add-support-quirk-for-the-mispredict-bit-on-knights-landing-cpus.patch
+dm-thin-metadata-try-to-avoid-ever-aborting-transactions.patch
+netfilter-conntrack-timeout-interface-depend-on-config_nf_conntrack_timeout.patch
+arch-hexagon-fix-kernel-dma.c-build-warning.patch
+hexagon-modify-ffs-and-fls-to-return-int.patch
+arm64-jump_label.h-use-asm_volatile_goto-macro-instead-of-asm-goto.patch
+drm-amdgpu-fix-error-handling-in-amdgpu_cs_user_fence_chunk.patch
+r8169-clear-rtl_flag_task_-_pending-when-clearing-rtl_flag_task_enabled.patch
+s390-qeth-use-vzalloc-for-query-oat-buffer.patch
+s390-qeth-don-t-dump-past-end-of-unknown-hw-header.patch
+cifs-read-overflow-in-is_valid_oplock_break.patch
+xen-manage-don-t-complain-about-an-empty-value-in-control-sysrq-node.patch
+xen-avoid-crash-in-disable_hotplug_cpu.patch
+xen-fix-gcc-warning-and-remove-duplicate-evtchn_row-evtchn_col-usage.patch
--- /dev/null
+From foo@baz Mon Oct 8 17:56:31 CEST 2018
+From: Anton Vasilyev <vasilyev@ispras.ru>
+Date: Tue, 7 Aug 2018 14:44:48 +0300
+Subject: usb: gadget: fotg210-udc: Fix memory leak of fotg210->ep[i]
+
+From: Anton Vasilyev <vasilyev@ispras.ru>
+
+[ Upstream commit c37bd52836296ecc9a0fc8060b819089aebdbcde ]
+
+There is no deallocation of fotg210->ep[i] elements, allocated at
+fotg210_udc_probe.
+
+The patch adds deallocation of fotg210->ep array elements and simplifies
+error path of fotg210_udc_probe().
+
+Found by Linux Driver Verification project (linuxtesting.org).
+
+Signed-off-by: Anton Vasilyev <vasilyev@ispras.ru>
+Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
+Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/usb/gadget/udc/fotg210-udc.c | 15 ++++++++++-----
+ 1 file changed, 10 insertions(+), 5 deletions(-)
+
+--- a/drivers/usb/gadget/udc/fotg210-udc.c
++++ b/drivers/usb/gadget/udc/fotg210-udc.c
+@@ -1066,12 +1066,15 @@ static const struct usb_gadget_ops fotg2
+ static int fotg210_udc_remove(struct platform_device *pdev)
+ {
+ struct fotg210_udc *fotg210 = platform_get_drvdata(pdev);
++ int i;
+
+ usb_del_gadget_udc(&fotg210->gadget);
+ iounmap(fotg210->reg);
+ free_irq(platform_get_irq(pdev, 0), fotg210);
+
+ fotg210_ep_free_request(&fotg210->ep[0]->ep, fotg210->ep0_req);
++ for (i = 0; i < FOTG210_MAX_NUM_EP; i++)
++ kfree(fotg210->ep[i]);
+ kfree(fotg210);
+
+ return 0;
+@@ -1102,7 +1105,7 @@ static int fotg210_udc_probe(struct plat
+ /* initialize udc */
+ fotg210 = kzalloc(sizeof(struct fotg210_udc), GFP_KERNEL);
+ if (fotg210 == NULL)
+- goto err_alloc;
++ goto err;
+
+ for (i = 0; i < FOTG210_MAX_NUM_EP; i++) {
+ _ep[i] = kzalloc(sizeof(struct fotg210_ep), GFP_KERNEL);
+@@ -1114,7 +1117,7 @@ static int fotg210_udc_probe(struct plat
+ fotg210->reg = ioremap(res->start, resource_size(res));
+ if (fotg210->reg == NULL) {
+ pr_err("ioremap error.\n");
+- goto err_map;
++ goto err_alloc;
+ }
+
+ spin_lock_init(&fotg210->lock);
+@@ -1162,7 +1165,7 @@ static int fotg210_udc_probe(struct plat
+ fotg210->ep0_req = fotg210_ep_alloc_request(&fotg210->ep[0]->ep,
+ GFP_KERNEL);
+ if (fotg210->ep0_req == NULL)
+- goto err_req;
++ goto err_map;
+
+ fotg210_init(fotg210);
+
+@@ -1190,12 +1193,14 @@ err_req:
+ fotg210_ep_free_request(&fotg210->ep[0]->ep, fotg210->ep0_req);
+
+ err_map:
+- if (fotg210->reg)
+- iounmap(fotg210->reg);
++ iounmap(fotg210->reg);
+
+ err_alloc:
++ for (i = 0; i < FOTG210_MAX_NUM_EP; i++)
++ kfree(fotg210->ep[i]);
+ kfree(fotg210);
+
++err:
+ return ret;
+ }
+
--- /dev/null
+From foo@baz Mon Oct 8 17:56:31 CEST 2018
+From: Ben Hutchings <ben.hutchings@codethink.co.uk>
+Date: Wed, 15 Aug 2018 21:45:37 +0100
+Subject: USB: yurex: Check for truncation in yurex_read()
+
+From: Ben Hutchings <ben.hutchings@codethink.co.uk>
+
+[ Upstream commit 14427b86837a4baf1c121934c6599bdb67dfa9fc ]
+
+snprintf() always returns the full length of the string it could have
+printed, even if it was truncated because the buffer was too small.
+So in case the counter value is truncated, we will over-read from
+in_buffer and over-write to the caller's buffer.
+
+I don't think it's actually possible for this to happen, but in case
+truncation occurs, WARN and return -EIO.
+
+Signed-off-by: Ben Hutchings <ben.hutchings@codethink.co.uk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/usb/misc/yurex.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+--- a/drivers/usb/misc/yurex.c
++++ b/drivers/usb/misc/yurex.c
+@@ -417,6 +417,9 @@ static ssize_t yurex_read(struct file *f
+ spin_unlock_irqrestore(&dev->lock, flags);
+ mutex_unlock(&dev->io_mutex);
+
++ if (WARN_ON_ONCE(len >= sizeof(in_buffer)))
++ return -EIO;
++
+ return simple_read_from_buffer(buffer, count, ppos, in_buffer, len);
+ }
+
--- /dev/null
+From foo@baz Mon Oct 8 17:56:31 CEST 2018
+From: Olaf Hering <olaf@aepfle.de>
+Date: Fri, 7 Sep 2018 16:31:35 +0200
+Subject: xen: avoid crash in disable_hotplug_cpu
+
+From: Olaf Hering <olaf@aepfle.de>
+
+[ Upstream commit 3366cdb6d350d95466ee430ac50f3c8415ca8f46 ]
+
+The command 'xl vcpu-set 0 0', issued in dom0, will crash dom0:
+
+BUG: unable to handle kernel NULL pointer dereference at 00000000000002d8
+PGD 0 P4D 0
+Oops: 0000 [#1] PREEMPT SMP NOPTI
+CPU: 7 PID: 65 Comm: xenwatch Not tainted 4.19.0-rc2-1.ga9462db-default #1 openSUSE Tumbleweed (unreleased)
+Hardware name: Intel Corporation S5520UR/S5520UR, BIOS S5500.86B.01.00.0050.050620101605 05/06/2010
+RIP: e030:device_offline+0x9/0xb0
+Code: 77 24 00 e9 ce fe ff ff 48 8b 13 e9 68 ff ff ff 48 8b 13 e9 29 ff ff ff 48 8b 13 e9 ea fe ff ff 90 66 66 66 66 90 41 54 55 53 <f6> 87 d8 02 00 00 01 0f 85 88 00 00 00 48 c7 c2 20 09 60 81 31 f6
+RSP: e02b:ffffc90040f27e80 EFLAGS: 00010203
+RAX: 0000000000000000 RBX: 0000000000000000 RCX: 0000000000000000
+RDX: ffff8801f3800000 RSI: ffffc90040f27e70 RDI: 0000000000000000
+RBP: 0000000000000000 R08: ffffffff820e47b3 R09: 0000000000000000
+R10: 0000000000007ff0 R11: 0000000000000000 R12: ffffffff822e6d30
+R13: dead000000000200 R14: dead000000000100 R15: ffffffff8158b4e0
+FS: 00007ffa595158c0(0000) GS:ffff8801f39c0000(0000) knlGS:0000000000000000
+CS: e033 DS: 0000 ES: 0000 CR0: 0000000080050033
+CR2: 00000000000002d8 CR3: 00000001d9602000 CR4: 0000000000002660
+Call Trace:
+ handle_vcpu_hotplug_event+0xb5/0xc0
+ xenwatch_thread+0x80/0x140
+ ? wait_woken+0x80/0x80
+ kthread+0x112/0x130
+ ? kthread_create_worker_on_cpu+0x40/0x40
+ ret_from_fork+0x3a/0x50
+
+This happens because handle_vcpu_hotplug_event is called twice. In the
+first iteration cpu_present is still true, in the second iteration
+cpu_present is false which causes get_cpu_device to return NULL.
+In case of cpu#0, cpu_online is apparently always true.
+
+Fix this crash by checking if the cpu can be hotplugged, which is false
+for a cpu that was just removed.
+
+Also check if the cpu was actually offlined by device_remove, otherwise
+leave the cpu_present state as it is.
+
+Rearrange to code to do all work with device_hotplug_lock held.
+
+Signed-off-by: Olaf Hering <olaf@aepfle.de>
+Reviewed-by: Juergen Gross <jgross@suse.com>
+Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
+Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/xen/cpu_hotplug.c | 15 ++++++++-------
+ 1 file changed, 8 insertions(+), 7 deletions(-)
+
+--- a/drivers/xen/cpu_hotplug.c
++++ b/drivers/xen/cpu_hotplug.c
+@@ -19,15 +19,16 @@ static void enable_hotplug_cpu(int cpu)
+
+ static void disable_hotplug_cpu(int cpu)
+ {
+- if (cpu_online(cpu)) {
+- lock_device_hotplug();
++ if (!cpu_is_hotpluggable(cpu))
++ return;
++ lock_device_hotplug();
++ if (cpu_online(cpu))
+ device_offline(get_cpu_device(cpu));
+- unlock_device_hotplug();
+- }
+- if (cpu_present(cpu))
++ if (!cpu_online(cpu) && cpu_present(cpu)) {
+ xen_arch_unregister_cpu(cpu);
+-
+- set_cpu_present(cpu, false);
++ set_cpu_present(cpu, false);
++ }
++ unlock_device_hotplug();
+ }
+
+ static int vcpu_online(unsigned int cpu)
--- /dev/null
+From foo@baz Mon Oct 8 17:56:31 CEST 2018
+From: Josh Abraham <j.abraham1776@gmail.com>
+Date: Wed, 12 Sep 2018 15:13:54 -1000
+Subject: xen: fix GCC warning and remove duplicate EVTCHN_ROW/EVTCHN_COL usage
+
+From: Josh Abraham <j.abraham1776@gmail.com>
+
+[ Upstream commit 4dca864b59dd150a221730775e2f21f49779c135 ]
+
+This patch removes duplicate macro useage in events_base.c.
+
+It also fixes gcc warning:
+variable ‘col’ set but not used [-Wunused-but-set-variable]
+
+Signed-off-by: Joshua Abraham <j.abraham1776@gmail.com>
+Reviewed-by: Juergen Gross <jgross@suse.com>
+Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
+Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/xen/events/events_base.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/xen/events/events_base.c
++++ b/drivers/xen/events/events_base.c
+@@ -138,7 +138,7 @@ static int set_evtchn_to_irq(unsigned ev
+ clear_evtchn_to_irq_row(row);
+ }
+
+- evtchn_to_irq[EVTCHN_ROW(evtchn)][EVTCHN_COL(evtchn)] = irq;
++ evtchn_to_irq[row][col] = irq;
+ return 0;
+ }
+
--- /dev/null
+From foo@baz Mon Oct 8 17:56:31 CEST 2018
+From: Vitaly Kuznetsov <vkuznets@redhat.com>
+Date: Thu, 6 Sep 2018 13:26:08 +0200
+Subject: xen/manage: don't complain about an empty value in control/sysrq node
+
+From: Vitaly Kuznetsov <vkuznets@redhat.com>
+
+[ Upstream commit 87dffe86d406bee8782cac2db035acb9a28620a7 ]
+
+When guest receives a sysrq request from the host it acknowledges it by
+writing '\0' to control/sysrq xenstore node. This, however, make xenstore
+watch fire again but xenbus_scanf() fails to parse empty value with "%c"
+format string:
+
+ sysrq: SysRq : Emergency Sync
+ Emergency Sync complete
+ xen:manage: Error -34 reading sysrq code in control/sysrq
+
+Ignore -ERANGE the same way we already ignore -ENOENT, empty value in
+control/sysrq is totally legal.
+
+Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
+Reviewed-by: Wei Liu <wei.liu2@citrix.com>
+Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
+Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/xen/manage.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+--- a/drivers/xen/manage.c
++++ b/drivers/xen/manage.c
+@@ -283,9 +283,11 @@ static void sysrq_handler(struct xenbus_
+ /*
+ * The Xenstore watch fires directly after registering it and
+ * after a suspend/resume cycle. So ENOENT is no error but
+- * might happen in those cases.
++ * might happen in those cases. ERANGE is observed when we get
++ * an empty value (''), this happens when we acknowledge the
++ * request by writing '\0' below.
+ */
+- if (err != -ENOENT)
++ if (err != -ENOENT && err != -ERANGE)
+ pr_err("Error %d reading sysrq code in control/sysrq\n",
+ err);
+ xenbus_transaction_end(xbt, 1);