]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
Fixes for 4.19
authorSasha Levin <sashal@kernel.org>
Wed, 4 Sep 2024 17:42:44 +0000 (13:42 -0400)
committerSasha Levin <sashal@kernel.org>
Wed, 4 Sep 2024 17:42:44 +0000 (13:42 -0400)
Signed-off-by: Sasha Levin <sashal@kernel.org>
queue-4.19/apparmor-fix-possible-null-pointer-dereference.patch [new file with mode: 0644]
queue-4.19/drm-amdgpu-fix-mc_data-out-of-bounds-read-warning.patch [new file with mode: 0644]
queue-4.19/drm-amdgpu-fix-overflowed-array-index-read-warning.patch [new file with mode: 0644]
queue-4.19/drm-amdgpu-fix-ucode-out-of-bounds-read-warning.patch [new file with mode: 0644]
queue-4.19/drm-amdgpu-fix-uninitialized-variable-warning-in-amd.patch [new file with mode: 0644]
queue-4.19/drm-amdkfd-reconcile-the-definition-and-use-of-oem_i.patch [new file with mode: 0644]
queue-4.19/media-uvcvideo-enforce-alignment-of-frame-and-interv.patch [new file with mode: 0644]
queue-4.19/series
queue-4.19/smack-tcp-ipv4-fix-incorrect-labeling.patch [new file with mode: 0644]
queue-4.19/usbip-don-t-submit-special-requests-twice.patch [new file with mode: 0644]

diff --git a/queue-4.19/apparmor-fix-possible-null-pointer-dereference.patch b/queue-4.19/apparmor-fix-possible-null-pointer-dereference.patch
new file mode 100644 (file)
index 0000000..12c87e4
--- /dev/null
@@ -0,0 +1,107 @@
+From b2783934765b7d4a053537a4971b91d482c4fd4a Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 8 May 2024 01:12:29 +0900
+Subject: apparmor: fix possible NULL pointer dereference
+
+From: Leesoo Ahn <lsahn@ooseel.net>
+
+[ Upstream commit 3dd384108d53834002be5630132ad5c3f32166ad ]
+
+profile->parent->dents[AAFS_PROF_DIR] could be NULL only if its parent is made
+from __create_missing_ancestors(..) and 'ent->old' is NULL in
+aa_replace_profiles(..).
+In that case, it must return an error code and the code, -ENOENT represents
+its state that the path of its parent is not existed yet.
+
+BUG: kernel NULL pointer dereference, address: 0000000000000030
+PGD 0 P4D 0
+PREEMPT SMP PTI
+CPU: 4 PID: 3362 Comm: apparmor_parser Not tainted 6.8.0-24-generic #24
+Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.15.0-1 04/01/2014
+RIP: 0010:aafs_create.constprop.0+0x7f/0x130
+Code: 4c 63 e0 48 83 c4 18 4c 89 e0 5b 41 5c 41 5d 41 5e 41 5f 5d 31 d2 31 c9 31 f6 31 ff 45 31 c0 45 31 c9 45 31 d2 c3 cc cc cc cc <4d> 8b 55 30 4d 8d ba a0 00 00 00 4c 89 55 c0 4c 89 ff e8 7a 6a ae
+RSP: 0018:ffffc9000b2c7c98 EFLAGS: 00010246
+RAX: 0000000000000000 RBX: 00000000000041ed RCX: 0000000000000000
+RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000000
+RBP: ffffc9000b2c7cd8 R08: 0000000000000000 R09: 0000000000000000
+R10: 0000000000000000 R11: 0000000000000000 R12: ffffffff82baac10
+R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000
+FS:  00007be9f22cf740(0000) GS:ffff88817bc00000(0000) knlGS:0000000000000000
+CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
+CR2: 0000000000000030 CR3: 0000000134b08000 CR4: 00000000000006f0
+Call Trace:
+ <TASK>
+ ? show_regs+0x6d/0x80
+ ? __die+0x24/0x80
+ ? page_fault_oops+0x99/0x1b0
+ ? kernelmode_fixup_or_oops+0xb2/0x140
+ ? __bad_area_nosemaphore+0x1a5/0x2c0
+ ? find_vma+0x34/0x60
+ ? bad_area_nosemaphore+0x16/0x30
+ ? do_user_addr_fault+0x2a2/0x6b0
+ ? exc_page_fault+0x83/0x1b0
+ ? asm_exc_page_fault+0x27/0x30
+ ? aafs_create.constprop.0+0x7f/0x130
+ ? aafs_create.constprop.0+0x51/0x130
+ __aafs_profile_mkdir+0x3d6/0x480
+ aa_replace_profiles+0x83f/0x1270
+ policy_update+0xe3/0x180
+ profile_load+0xbc/0x150
+ ? rw_verify_area+0x47/0x140
+ vfs_write+0x100/0x480
+ ? __x64_sys_openat+0x55/0xa0
+ ? syscall_exit_to_user_mode+0x86/0x260
+ ksys_write+0x73/0x100
+ __x64_sys_write+0x19/0x30
+ x64_sys_call+0x7e/0x25c0
+ do_syscall_64+0x7f/0x180
+ entry_SYSCALL_64_after_hwframe+0x78/0x80
+RIP: 0033:0x7be9f211c574
+Code: c7 00 16 00 00 00 b8 ff ff ff ff c3 66 2e 0f 1f 84 00 00 00 00 00 f3 0f 1e fa 80 3d d5 ea 0e 00 00 74 13 b8 01 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 54 c3 0f 1f 00 55 48 89 e5 48 83 ec 20 48 89
+RSP: 002b:00007ffd26f2b8c8 EFLAGS: 00000202 ORIG_RAX: 0000000000000001
+RAX: ffffffffffffffda RBX: 00005d504415e200 RCX: 00007be9f211c574
+RDX: 0000000000001fc1 RSI: 00005d504418bc80 RDI: 0000000000000004
+RBP: 0000000000001fc1 R08: 0000000000001fc1 R09: 0000000080000000
+R10: 0000000000000000 R11: 0000000000000202 R12: 00005d504418bc80
+R13: 0000000000000004 R14: 00007ffd26f2b9b0 R15: 00007ffd26f2ba30
+ </TASK>
+Modules linked in: snd_seq_dummy snd_hrtimer qrtr snd_hda_codec_generic snd_hda_intel snd_intel_dspcfg snd_intel_sdw_acpi snd_hda_codec snd_hda_core snd_hwdep snd_pcm snd_seq_midi snd_seq_midi_event snd_rawmidi snd_seq snd_seq_device i2c_i801 snd_timer i2c_smbus qxl snd soundcore drm_ttm_helper lpc_ich ttm joydev input_leds serio_raw mac_hid binfmt_misc msr parport_pc ppdev lp parport efi_pstore nfnetlink dmi_sysfs qemu_fw_cfg ip_tables x_tables autofs4 hid_generic usbhid hid ahci libahci psmouse virtio_rng xhci_pci xhci_pci_renesas
+CR2: 0000000000000030
+---[ end trace 0000000000000000 ]---
+RIP: 0010:aafs_create.constprop.0+0x7f/0x130
+Code: 4c 63 e0 48 83 c4 18 4c 89 e0 5b 41 5c 41 5d 41 5e 41 5f 5d 31 d2 31 c9 31 f6 31 ff 45 31 c0 45 31 c9 45 31 d2 c3 cc cc cc cc <4d> 8b 55 30 4d 8d ba a0 00 00 00 4c 89 55 c0 4c 89 ff e8 7a 6a ae
+RSP: 0018:ffffc9000b2c7c98 EFLAGS: 00010246
+RAX: 0000000000000000 RBX: 00000000000041ed RCX: 0000000000000000
+RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000000
+RBP: ffffc9000b2c7cd8 R08: 0000000000000000 R09: 0000000000000000
+R10: 0000000000000000 R11: 0000000000000000 R12: ffffffff82baac10
+R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000
+FS:  00007be9f22cf740(0000) GS:ffff88817bc00000(0000) knlGS:0000000000000000
+CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
+CR2: 0000000000000030 CR3: 0000000134b08000 CR4: 00000000000006f0
+
+Signed-off-by: Leesoo Ahn <lsahn@ooseel.net>
+Signed-off-by: John Johansen <john.johansen@canonical.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ security/apparmor/apparmorfs.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/security/apparmor/apparmorfs.c b/security/apparmor/apparmorfs.c
+index 80012d21f038..1223b2648a54 100644
+--- a/security/apparmor/apparmorfs.c
++++ b/security/apparmor/apparmorfs.c
+@@ -1593,6 +1593,10 @@ int __aafs_profile_mkdir(struct aa_profile *profile, struct dentry *parent)
+               struct aa_profile *p;
+               p = aa_deref_parent(profile);
+               dent = prof_dir(p);
++              if (!dent) {
++                      error = -ENOENT;
++                      goto fail2;
++              }
+               /* adding to parent that previously didn't have children */
+               dent = aafs_create_dir("profiles", dent);
+               if (IS_ERR(dent))
+-- 
+2.43.0
+
diff --git a/queue-4.19/drm-amdgpu-fix-mc_data-out-of-bounds-read-warning.patch b/queue-4.19/drm-amdgpu-fix-mc_data-out-of-bounds-read-warning.patch
new file mode 100644 (file)
index 0000000..b0b497b
--- /dev/null
@@ -0,0 +1,35 @@
+From 027fb8417b5c13744a9ea8a1900396e7093f974d Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 6 May 2024 16:30:01 +0800
+Subject: drm/amdgpu: fix mc_data out-of-bounds read warning
+
+From: Tim Huang <Tim.Huang@amd.com>
+
+[ Upstream commit 51dfc0a4d609fe700750a62f41447f01b8c9ea50 ]
+
+Clear warning that read mc_data[i-1] may out-of-bounds.
+
+Signed-off-by: Tim Huang <Tim.Huang@amd.com>
+Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c
+index 95f7bb22402f..fe01df99445d 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c
+@@ -1625,6 +1625,8 @@ int amdgpu_atombios_init_mc_reg_table(struct amdgpu_device *adev,
+                                                                               (u32)le32_to_cpu(*((u32 *)reg_data + j));
+                                                                       j++;
+                                                               } else if ((reg_table->mc_reg_address[i].pre_reg_data & LOW_NIBBLE_MASK) == DATA_EQU_PREV) {
++                                                                      if (i == 0)
++                                                                              continue;
+                                                                       reg_table->mc_reg_table_entry[num_ranges].mc_data[i] =
+                                                                               reg_table->mc_reg_table_entry[num_ranges].mc_data[i - 1];
+                                                               }
+-- 
+2.43.0
+
diff --git a/queue-4.19/drm-amdgpu-fix-overflowed-array-index-read-warning.patch b/queue-4.19/drm-amdgpu-fix-overflowed-array-index-read-warning.patch
new file mode 100644 (file)
index 0000000..5f05a7a
--- /dev/null
@@ -0,0 +1,41 @@
+From fc38446f1dd3bc1f677f678e3cda0622d19fa133 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 25 Apr 2024 13:15:27 +0800
+Subject: drm/amdgpu: fix overflowed array index read warning
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Tim Huang <Tim.Huang@amd.com>
+
+[ Upstream commit ebbc2ada5c636a6a63d8316a3408753768f5aa9f ]
+
+Clear overflowed array index read warning by cast operation.
+
+Signed-off-by: Tim Huang <Tim.Huang@amd.com>
+Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
+Reviewed-by: Christian König <christian.koenig@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
+index 93794a85f83d..d1efab227034 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
+@@ -497,8 +497,9 @@ static ssize_t amdgpu_debugfs_ring_read(struct file *f, char __user *buf,
+                                       size_t size, loff_t *pos)
+ {
+       struct amdgpu_ring *ring = file_inode(f)->i_private;
+-      int r, i;
+       uint32_t value, result, early[3];
++      loff_t i;
++      int r;
+       if (*pos & 3 || size & 3)
+               return -EINVAL;
+-- 
+2.43.0
+
diff --git a/queue-4.19/drm-amdgpu-fix-ucode-out-of-bounds-read-warning.patch b/queue-4.19/drm-amdgpu-fix-ucode-out-of-bounds-read-warning.patch
new file mode 100644 (file)
index 0000000..cefa2f7
--- /dev/null
@@ -0,0 +1,36 @@
+From 7a66b2ae9f8e3604987357af54825552dbe280bb Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 6 May 2024 16:21:00 +0800
+Subject: drm/amdgpu: fix ucode out-of-bounds read warning
+
+From: Tim Huang <Tim.Huang@amd.com>
+
+[ Upstream commit 8944acd0f9db33e17f387fdc75d33bb473d7936f ]
+
+Clear warning that read ucode[] may out-of-bounds.
+
+Signed-off-by: Tim Huang <Tim.Huang@amd.com>
+Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c
+index 387f1cf1dc20..9e768ff392fe 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c
+@@ -212,6 +212,9 @@ static int amdgpu_cgs_get_firmware_info(struct cgs_device *cgs_device,
+               struct amdgpu_firmware_info *ucode;
+               id = fw_type_convert(cgs_device, type);
++              if (id >= AMDGPU_UCODE_ID_MAXIMUM)
++                      return -EINVAL;
++
+               ucode = &adev->firmware.ucode[id];
+               if (ucode->fw == NULL)
+                       return -EINVAL;
+-- 
+2.43.0
+
diff --git a/queue-4.19/drm-amdgpu-fix-uninitialized-variable-warning-in-amd.patch b/queue-4.19/drm-amdgpu-fix-uninitialized-variable-warning-in-amd.patch
new file mode 100644 (file)
index 0000000..560992c
--- /dev/null
@@ -0,0 +1,35 @@
+From 71db54915fb1c740c69b5cf00507fe5d5f61b0ec Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 24 Apr 2024 10:50:54 +0800
+Subject: drm/amdgpu: Fix uninitialized variable warning in amdgpu_afmt_acr
+
+From: Ma Jun <Jun.Ma2@amd.com>
+
+[ Upstream commit c0d6bd3cd209419cc46ac49562bef1db65d90e70 ]
+
+Assign value to clock to fix the warning below:
+"Using uninitialized value res. Field res.clock is uninitialized"
+
+Signed-off-by: Ma Jun <Jun.Ma2@amd.com>
+Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_afmt.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_afmt.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_afmt.c
+index 3889486f71fe..5272cf1708cd 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_afmt.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_afmt.c
+@@ -100,6 +100,7 @@ struct amdgpu_afmt_acr amdgpu_afmt_acr(uint32_t clock)
+       amdgpu_afmt_calc_cts(clock, &res.cts_32khz, &res.n_32khz, 32000);
+       amdgpu_afmt_calc_cts(clock, &res.cts_44_1khz, &res.n_44_1khz, 44100);
+       amdgpu_afmt_calc_cts(clock, &res.cts_48khz, &res.n_48khz, 48000);
++      res.clock = clock;
+       return res;
+ }
+-- 
+2.43.0
+
diff --git a/queue-4.19/drm-amdkfd-reconcile-the-definition-and-use-of-oem_i.patch b/queue-4.19/drm-amdkfd-reconcile-the-definition-and-use-of-oem_i.patch
new file mode 100644 (file)
index 0000000..228bd25
--- /dev/null
@@ -0,0 +1,71 @@
+From 308963e069a95f05a6a5759ef83eb7d473a3138e Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 3 May 2024 15:31:08 -0400
+Subject: drm/amdkfd: Reconcile the definition and use of oem_id in struct
+ kfd_topology_device
+
+From: Michael Chen <michael.chen@amd.com>
+
+[ Upstream commit 10f624ef239bd136cdcc5bbc626157a57b938a31 ]
+
+Currently oem_id is defined as uint8_t[6] and casted to uint64_t*
+in some use case. This would lead code scanner to complain about
+access beyond. Re-define it in union to enforce 8-byte size and
+alignment to avoid potential issue.
+
+Signed-off-by: Michael Chen <michael.chen@amd.com>
+Reviewed-by: Felix Kuehling <felix.kuehling@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/amd/amdkfd/kfd_crat.h     | 2 --
+ drivers/gpu/drm/amd/amdkfd/kfd_topology.c | 3 +--
+ drivers/gpu/drm/amd/amdkfd/kfd_topology.h | 5 ++++-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_crat.h b/drivers/gpu/drm/amd/amdkfd/kfd_crat.h
+index b5cd182b9edd..037539c0b63f 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_crat.h
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_crat.h
+@@ -42,8 +42,6 @@
+ #define CRAT_OEMTABLEID_LENGTH        8
+ #define CRAT_RESERVED_LENGTH  6
+-#define CRAT_OEMID_64BIT_MASK ((1ULL << (CRAT_OEMID_LENGTH * 8)) - 1)
+-
+ /* Compute Unit flags */
+ #define COMPUTE_UNIT_CPU      (1 << 0)  /* Create Virtual CRAT for CPU */
+ #define COMPUTE_UNIT_GPU      (1 << 1)  /* Create Virtual CRAT for GPU */
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_topology.c b/drivers/gpu/drm/amd/amdkfd/kfd_topology.c
+index 5cf499a07806..407201315292 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_topology.c
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_topology.c
+@@ -863,8 +863,7 @@ static void kfd_update_system_properties(void)
+       dev = list_last_entry(&topology_device_list,
+                       struct kfd_topology_device, list);
+       if (dev) {
+-              sys_props.platform_id =
+-                      (*((uint64_t *)dev->oem_id)) & CRAT_OEMID_64BIT_MASK;
++              sys_props.platform_id = dev->oem_id64;
+               sys_props.platform_oem = *((uint64_t *)dev->oem_table_id);
+               sys_props.platform_rev = dev->oem_revision;
+       }
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_topology.h b/drivers/gpu/drm/amd/amdkfd/kfd_topology.h
+index 7d9c3f948dff..e47c0267f206 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_topology.h
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_topology.h
+@@ -164,7 +164,10 @@ struct kfd_topology_device {
+       struct attribute                attr_gpuid;
+       struct attribute                attr_name;
+       struct attribute                attr_props;
+-      uint8_t                         oem_id[CRAT_OEMID_LENGTH];
++      union {
++              uint8_t                         oem_id[CRAT_OEMID_LENGTH];
++              uint64_t                        oem_id64;
++      };
+       uint8_t                         oem_table_id[CRAT_OEMTABLEID_LENGTH];
+       uint32_t                        oem_revision;
+ };
+-- 
+2.43.0
+
diff --git a/queue-4.19/media-uvcvideo-enforce-alignment-of-frame-and-interv.patch b/queue-4.19/media-uvcvideo-enforce-alignment-of-frame-and-interv.patch
new file mode 100644 (file)
index 0000000..dce0538
--- /dev/null
@@ -0,0 +1,68 @@
+From f3cbdc2d26c72a327600530ae0c3d31129527ee7 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 4 Apr 2024 17:56:18 +0000
+Subject: media: uvcvideo: Enforce alignment of frame and interval
+
+From: Ricardo Ribalda <ribalda@chromium.org>
+
+[ Upstream commit c8931ef55bd325052ec496f242aea7f6de47dc9c ]
+
+Struct uvc_frame and interval (u32*) are packaged together on
+streaming->formats on a single contiguous allocation.
+
+Right now they are allocated right after uvc_format, without taking into
+consideration their required alignment.
+
+This is working fine because both structures have a field with a
+pointer, but it will stop working when the sizeof() of any of those
+structs is not a multiple of the sizeof(void*).
+
+Enforce that alignment during the allocation.
+
+Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
+Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
+Link: https://lore.kernel.org/r/20240404-uvc-align-v2-1-9e104b0ecfbd@chromium.org
+Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/media/usb/uvc/uvc_driver.c | 18 ++++++++++++++----
+ 1 file changed, 14 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc_driver.c
+index 775d67720648..6367ee9c0066 100644
+--- a/drivers/media/usb/uvc/uvc_driver.c
++++ b/drivers/media/usb/uvc/uvc_driver.c
+@@ -860,16 +860,26 @@ static int uvc_parse_streaming(struct uvc_device *dev,
+               goto error;
+       }
+-      size = nformats * sizeof(*format) + nframes * sizeof(*frame)
++      /*
++       * Allocate memory for the formats, the frames and the intervals,
++       * plus any required padding to guarantee that everything has the
++       * correct alignment.
++       */
++      size = nformats * sizeof(*format);
++      size = ALIGN(size, __alignof__(*frame)) + nframes * sizeof(*frame);
++      size = ALIGN(size, __alignof__(*interval))
+            + nintervals * sizeof(*interval);
++
+       format = kzalloc(size, GFP_KERNEL);
+-      if (format == NULL) {
++      if (!format) {
+               ret = -ENOMEM;
+               goto error;
+       }
+-      frame = (struct uvc_frame *)&format[nformats];
+-      interval = (u32 *)&frame[nframes];
++      frame = (void *)format + nformats * sizeof(*format);
++      frame = PTR_ALIGN(frame, __alignof__(*frame));
++      interval = (void *)frame + nframes * sizeof(*frame);
++      interval = PTR_ALIGN(interval, __alignof__(*interval));
+       streaming->format = format;
+       streaming->nformats = nformats;
+-- 
+2.43.0
+
index 45a3d11b145f00a3f56d6f1d1940351ecc5d0a1a..54cbea522a16890d4e0c1a2b1173700a3b7f0949 100644 (file)
@@ -1,3 +1,12 @@
 net-usb-qmi_wwan-add-meig-smart-srm825l.patch
 usb-dwc3-st-add-of_node_put-before-return-in-probe-f.patch
 usb-dwc3-st-add-missing-depopulate-in-probe-error-pa.patch
+drm-amdgpu-fix-uninitialized-variable-warning-in-amd.patch
+drm-amdgpu-fix-overflowed-array-index-read-warning.patch
+drm-amdgpu-fix-ucode-out-of-bounds-read-warning.patch
+drm-amdgpu-fix-mc_data-out-of-bounds-read-warning.patch
+drm-amdkfd-reconcile-the-definition-and-use-of-oem_i.patch
+apparmor-fix-possible-null-pointer-dereference.patch
+usbip-don-t-submit-special-requests-twice.patch
+smack-tcp-ipv4-fix-incorrect-labeling.patch
+media-uvcvideo-enforce-alignment-of-frame-and-interv.patch
diff --git a/queue-4.19/smack-tcp-ipv4-fix-incorrect-labeling.patch b/queue-4.19/smack-tcp-ipv4-fix-incorrect-labeling.patch
new file mode 100644 (file)
index 0000000..ea5311a
--- /dev/null
@@ -0,0 +1,69 @@
+From 5ca719862d8c4d2646cbc0f2adb9a524968cab30 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 5 Jun 2024 15:41:50 -0700
+Subject: smack: tcp: ipv4, fix incorrect labeling
+
+From: Casey Schaufler <casey@schaufler-ca.com>
+
+[ Upstream commit 2fe209d0ad2e2729f7e22b9b31a86cc3ff0db550 ]
+
+Currently, Smack mirrors the label of incoming tcp/ipv4 connections:
+when a label 'foo' connects to a label 'bar' with tcp/ipv4,
+'foo' always gets 'foo' in returned ipv4 packets. So,
+1) returned packets are incorrectly labeled ('foo' instead of 'bar')
+2) 'bar' can write to 'foo' without being authorized to write.
+
+Here is a scenario how to see this:
+
+* Take two machines, let's call them C and S,
+   with active Smack in the default state
+   (no settings, no rules, no labeled hosts, only builtin labels)
+
+* At S, add Smack rule 'foo bar w'
+   (labels 'foo' and 'bar' are instantiated at S at this moment)
+
+* At S, at label 'bar', launch a program
+   that listens for incoming tcp/ipv4 connections
+
+* From C, at label 'foo', connect to the listener at S.
+   (label 'foo' is instantiated at C at this moment)
+   Connection succeedes and works.
+
+* Send some data in both directions.
+* Collect network traffic of this connection.
+
+All packets in both directions are labeled with the CIPSO
+of the label 'foo'. Hence, label 'bar' writes to 'foo' without
+being authorized, and even without ever being known at C.
+
+If anybody cares: exactly the same happens with DCCP.
+
+This behavior 1st manifested in release 2.6.29.4 (see Fixes below)
+and it looks unintentional. At least, no explanation was provided.
+
+I changed returned packes label into the 'bar',
+to bring it into line with the Smack documentation claims.
+
+Signed-off-by: Konstantin Andreev <andreev@swemel.ru>
+Signed-off-by: Casey Schaufler <casey@schaufler-ca.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ security/smack/smack_lsm.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c
+index d9bff4ba7f2e..158f4df39be4 100644
+--- a/security/smack/smack_lsm.c
++++ b/security/smack/smack_lsm.c
+@@ -4291,7 +4291,7 @@ static int smack_inet_conn_request(struct sock *sk, struct sk_buff *skb,
+       rcu_read_unlock();
+       if (hskp == NULL)
+-              rc = netlbl_req_setattr(req, &skp->smk_netlabel);
++              rc = netlbl_req_setattr(req, &ssp->smk_out->smk_netlabel);
+       else
+               netlbl_req_delattr(req);
+-- 
+2.43.0
+
diff --git a/queue-4.19/usbip-don-t-submit-special-requests-twice.patch b/queue-4.19/usbip-don-t-submit-special-requests-twice.patch
new file mode 100644 (file)
index 0000000..28d49be
--- /dev/null
@@ -0,0 +1,183 @@
+From 37230ae3869c535168f59f47ed2df53f08af7209 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 19 May 2024 16:15:38 +0200
+Subject: usbip: Don't submit special requests twice
+
+From: Simon Holesch <simon@holesch.de>
+
+[ Upstream commit 8b6b386f9aa936ed0c190446c71cf59d4a507690 ]
+
+Skip submitting URBs, when identical requests were already sent in
+tweak_special_requests(). Instead call the completion handler directly
+to return the result of the URB.
+
+Even though submitting those requests twice should be harmless, there
+are USB devices that react poorly to some duplicated requests.
+
+One example is the ChipIdea controller implementation in U-Boot: The
+second SET_CONFIGURATION request makes U-Boot disable and re-enable all
+endpoints. Re-enabling an endpoint in the ChipIdea controller, however,
+was broken until U-Boot commit b272c8792502 ("usb: ci: Fix gadget
+reinit").
+
+Signed-off-by: Simon Holesch <simon@holesch.de>
+Acked-by: Shuah Khan <skhan@linuxfoundation.org>
+Reviewed-by: Hongren Zheng <i@zenithal.me>
+Tested-by: Hongren Zheng <i@zenithal.me>
+Link: https://lore.kernel.org/r/20240519141922.171460-1-simon@holesch.de
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/usb/usbip/stub_rx.c | 77 ++++++++++++++++++++++++-------------
+ 1 file changed, 50 insertions(+), 27 deletions(-)
+
+diff --git a/drivers/usb/usbip/stub_rx.c b/drivers/usb/usbip/stub_rx.c
+index b88eeaee637a..72501198be45 100644
+--- a/drivers/usb/usbip/stub_rx.c
++++ b/drivers/usb/usbip/stub_rx.c
+@@ -144,53 +144,62 @@ static int tweak_set_configuration_cmd(struct urb *urb)
+       if (err && err != -ENODEV)
+               dev_err(&sdev->udev->dev, "can't set config #%d, error %d\n",
+                       config, err);
+-      return 0;
++      return err;
+ }
+ static int tweak_reset_device_cmd(struct urb *urb)
+ {
+       struct stub_priv *priv = (struct stub_priv *) urb->context;
+       struct stub_device *sdev = priv->sdev;
++      int err;
+       dev_info(&urb->dev->dev, "usb_queue_reset_device\n");
+-      if (usb_lock_device_for_reset(sdev->udev, NULL) < 0) {
++      err = usb_lock_device_for_reset(sdev->udev, NULL);
++      if (err < 0) {
+               dev_err(&urb->dev->dev, "could not obtain lock to reset device\n");
+-              return 0;
++              return err;
+       }
+-      usb_reset_device(sdev->udev);
++      err = usb_reset_device(sdev->udev);
+       usb_unlock_device(sdev->udev);
+-      return 0;
++      return err;
+ }
+ /*
+  * clear_halt, set_interface, and set_configuration require special tricks.
++ * Returns 1 if request was tweaked, 0 otherwise.
+  */
+-static void tweak_special_requests(struct urb *urb)
++static int tweak_special_requests(struct urb *urb)
+ {
++      int err;
++
+       if (!urb || !urb->setup_packet)
+-              return;
++              return 0;
+       if (usb_pipetype(urb->pipe) != PIPE_CONTROL)
+-              return;
++              return 0;
+       if (is_clear_halt_cmd(urb))
+               /* tweak clear_halt */
+-               tweak_clear_halt_cmd(urb);
++              err = tweak_clear_halt_cmd(urb);
+       else if (is_set_interface_cmd(urb))
+               /* tweak set_interface */
+-              tweak_set_interface_cmd(urb);
++              err = tweak_set_interface_cmd(urb);
+       else if (is_set_configuration_cmd(urb))
+               /* tweak set_configuration */
+-              tweak_set_configuration_cmd(urb);
++              err = tweak_set_configuration_cmd(urb);
+       else if (is_reset_device_cmd(urb))
+-              tweak_reset_device_cmd(urb);
+-      else
++              err = tweak_reset_device_cmd(urb);
++      else {
+               usbip_dbg_stub_rx("no need to tweak\n");
++              return 0;
++      }
++
++      return !err;
+ }
+ /*
+@@ -468,6 +477,7 @@ static void stub_recv_cmd_submit(struct stub_device *sdev,
+       int support_sg = 1;
+       int np = 0;
+       int ret, i;
++      int is_tweaked;
+       if (pipe == -1)
+               return;
+@@ -580,8 +590,11 @@ static void stub_recv_cmd_submit(struct stub_device *sdev,
+               priv->urbs[i]->pipe = pipe;
+               priv->urbs[i]->complete = stub_complete;
+-              /* no need to submit an intercepted request, but harmless? */
+-              tweak_special_requests(priv->urbs[i]);
++              /*
++               * all URBs belong to a single PDU, so a global is_tweaked flag is
++               * enough
++               */
++              is_tweaked = tweak_special_requests(priv->urbs[i]);
+               masking_bogus_flags(priv->urbs[i]);
+       }
+@@ -594,22 +607,32 @@ static void stub_recv_cmd_submit(struct stub_device *sdev,
+       /* urb is now ready to submit */
+       for (i = 0; i < priv->num_urbs; i++) {
+-              ret = usb_submit_urb(priv->urbs[i], GFP_KERNEL);
++              if (!is_tweaked) {
++                      ret = usb_submit_urb(priv->urbs[i], GFP_KERNEL);
+-              if (ret == 0)
+-                      usbip_dbg_stub_rx("submit urb ok, seqnum %u\n",
+-                                      pdu->base.seqnum);
+-              else {
+-                      dev_err(&udev->dev, "submit_urb error, %d\n", ret);
+-                      usbip_dump_header(pdu);
+-                      usbip_dump_urb(priv->urbs[i]);
++                      if (ret == 0)
++                              usbip_dbg_stub_rx("submit urb ok, seqnum %u\n",
++                                              pdu->base.seqnum);
++                      else {
++                              dev_err(&udev->dev, "submit_urb error, %d\n", ret);
++                              usbip_dump_header(pdu);
++                              usbip_dump_urb(priv->urbs[i]);
++                              /*
++                               * Pessimistic.
++                               * This connection will be discarded.
++                               */
++                              usbip_event_add(ud, SDEV_EVENT_ERROR_SUBMIT);
++                              break;
++                      }
++              } else {
+                       /*
+-                       * Pessimistic.
+-                       * This connection will be discarded.
++                       * An identical URB was already submitted in
++                       * tweak_special_requests(). Skip submitting this URB to not
++                       * duplicate the request.
+                        */
+-                      usbip_event_add(ud, SDEV_EVENT_ERROR_SUBMIT);
+-                      break;
++                      priv->urbs[i]->status = 0;
++                      stub_complete(priv->urbs[i]);
+               }
+       }
+-- 
+2.43.0
+