Import of kernel-6.12.0-55.39.1.el10_0
This commit is contained in:
parent
dfbe561888
commit
02b9685173
@ -12,7 +12,7 @@ RHEL_MINOR = 0
|
||||
#
|
||||
# Use this spot to avoid future merge conflicts.
|
||||
# Do not trim this comment.
|
||||
RHEL_RELEASE = 55.38.1
|
||||
RHEL_RELEASE = 55.39.1
|
||||
|
||||
#
|
||||
# RHEL_REBASE_NUM
|
||||
|
@ -1412,7 +1412,7 @@ static int cxl_port_setup_targets(struct cxl_port *port,
|
||||
|
||||
if (test_bit(CXL_REGION_F_AUTO, &cxlr->flags)) {
|
||||
if (cxld->interleave_ways != iw ||
|
||||
cxld->interleave_granularity != ig ||
|
||||
(iw > 1 && cxld->interleave_granularity != ig) ||
|
||||
cxld->hpa_range.start != p->res->start ||
|
||||
cxld->hpa_range.end != p->res->end ||
|
||||
((cxld->flags & CXL_DECODER_F_ENABLE) == 0)) {
|
||||
|
@ -45,6 +45,38 @@ static int hid_ignore_special_drivers = 0;
|
||||
module_param_named(ignore_special_drivers, hid_ignore_special_drivers, int, 0600);
|
||||
MODULE_PARM_DESC(ignore_special_drivers, "Ignore any special drivers and handle all devices by generic driver");
|
||||
|
||||
/*
|
||||
* Convert a signed n-bit integer to signed 32-bit integer.
|
||||
*/
|
||||
|
||||
static s32 snto32(__u32 value, unsigned int n)
|
||||
{
|
||||
if (!value || !n)
|
||||
return 0;
|
||||
|
||||
if (n > 32)
|
||||
n = 32;
|
||||
|
||||
return sign_extend32(value, n - 1);
|
||||
}
|
||||
|
||||
/*
|
||||
* Convert a signed 32-bit integer to a signed n-bit integer.
|
||||
*/
|
||||
|
||||
static u32 s32ton(__s32 value, unsigned int n)
|
||||
{
|
||||
s32 a;
|
||||
|
||||
if (!value || !n)
|
||||
return 0;
|
||||
|
||||
a = value >> (n - 1);
|
||||
if (a && a != -1)
|
||||
return value < 0 ? 1 << (n - 1) : (1 << (n - 1)) - 1;
|
||||
return value & ((1 << n) - 1);
|
||||
}
|
||||
|
||||
/*
|
||||
* Register a new report for a device.
|
||||
*/
|
||||
@ -425,7 +457,7 @@ static int hid_parser_global(struct hid_parser *parser, struct hid_item *item)
|
||||
* both this and the standard encoding. */
|
||||
raw_value = item_sdata(item);
|
||||
if (!(raw_value & 0xfffffff0))
|
||||
parser->global.unit_exponent = hid_snto32(raw_value, 4);
|
||||
parser->global.unit_exponent = snto32(raw_value, 4);
|
||||
else
|
||||
parser->global.unit_exponent = raw_value;
|
||||
return 0;
|
||||
@ -1315,46 +1347,6 @@ alloc_err:
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(hid_open_report);
|
||||
|
||||
/*
|
||||
* Convert a signed n-bit integer to signed 32-bit integer. Common
|
||||
* cases are done through the compiler, the screwed things has to be
|
||||
* done by hand.
|
||||
*/
|
||||
|
||||
static s32 snto32(__u32 value, unsigned n)
|
||||
{
|
||||
if (!value || !n)
|
||||
return 0;
|
||||
|
||||
if (n > 32)
|
||||
n = 32;
|
||||
|
||||
switch (n) {
|
||||
case 8: return ((__s8)value);
|
||||
case 16: return ((__s16)value);
|
||||
case 32: return ((__s32)value);
|
||||
}
|
||||
return value & (1 << (n - 1)) ? value | (~0U << n) : value;
|
||||
}
|
||||
|
||||
s32 hid_snto32(__u32 value, unsigned n)
|
||||
{
|
||||
return snto32(value, n);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(hid_snto32);
|
||||
|
||||
/*
|
||||
* Convert a signed 32-bit integer to a signed n-bit integer.
|
||||
*/
|
||||
|
||||
static u32 s32ton(__s32 value, unsigned n)
|
||||
{
|
||||
s32 a = value >> (n - 1);
|
||||
if (a && a != -1)
|
||||
return value < 0 ? 1 << (n - 1) : (1 << (n - 1)) - 1;
|
||||
return value & ((1 << n) - 1);
|
||||
}
|
||||
|
||||
/*
|
||||
* Extract/implement a data field from/to a little endian report (bit array).
|
||||
*
|
||||
|
@ -3296,13 +3296,13 @@ static int m560_raw_event(struct hid_device *hdev, u8 *data, int size)
|
||||
120);
|
||||
}
|
||||
|
||||
v = hid_snto32(hid_field_extract(hdev, data+3, 0, 12), 12);
|
||||
v = sign_extend32(hid_field_extract(hdev, data + 3, 0, 12), 11);
|
||||
input_report_rel(hidpp->input, REL_X, v);
|
||||
|
||||
v = hid_snto32(hid_field_extract(hdev, data+3, 12, 12), 12);
|
||||
v = sign_extend32(hid_field_extract(hdev, data + 3, 12, 12), 11);
|
||||
input_report_rel(hidpp->input, REL_Y, v);
|
||||
|
||||
v = hid_snto32(data[6], 8);
|
||||
v = sign_extend32(data[6], 7);
|
||||
if (v != 0)
|
||||
hidpp_scroll_counter_handle_scroll(hidpp->input,
|
||||
&hidpp->vertical_wheel_counter, v);
|
||||
|
@ -79,6 +79,7 @@ int ath12k_dp_peer_setup(struct ath12k *ar, int vdev_id, const u8 *addr)
|
||||
ret = ath12k_dp_rx_peer_frag_setup(ar, addr, vdev_id);
|
||||
if (ret) {
|
||||
ath12k_warn(ab, "failed to setup rx defrag context\n");
|
||||
tid--;
|
||||
goto peer_clean;
|
||||
}
|
||||
|
||||
|
@ -974,7 +974,6 @@ const struct hid_device_id *hid_match_device(struct hid_device *hdev,
|
||||
struct hid_driver *hdrv);
|
||||
bool hid_compare_device_paths(struct hid_device *hdev_a,
|
||||
struct hid_device *hdev_b, char separator);
|
||||
s32 hid_snto32(__u32 value, unsigned n);
|
||||
__u32 hid_field_extract(const struct hid_device *hid, __u8 *report,
|
||||
unsigned offset, unsigned n);
|
||||
|
||||
|
@ -1,3 +1,14 @@
|
||||
* Sat Oct 04 2025 CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com> [6.12.0-55.39.1.el10_0]
|
||||
- wifi: ath12k: Decrement TID on RX peer frag setup error handling (CKI Backport Bot) [RHEL-114712] {CVE-2025-39761}
|
||||
- ALSA: usb-audio: Validate UAC3 power domain descriptors, too (CKI Backport Bot) [RHEL-114695] {CVE-2025-38729}
|
||||
- ALSA: usb-audio: Fix size validation in convert_chmap_v3() (CKI Backport Bot) [RHEL-114695]
|
||||
- ALSA: usb-audio: Validate UAC3 cluster segment descriptors (CKI Backport Bot) [RHEL-114695] {CVE-2025-39757}
|
||||
- HID: core: Harden s32ton() against conversion to 0 bits (CKI Backport Bot) [RHEL-111037] {CVE-2025-38556}
|
||||
- HID: stop exporting hid_snto32() (CKI Backport Bot) [RHEL-111037] {CVE-2025-38556}
|
||||
- HID: simplify snto32() (CKI Backport Bot) [RHEL-111037] {CVE-2025-38556}
|
||||
- cxl: core/region - ignore interleave granularity when ways=1 (John W. Linville) [RHEL-107595]
|
||||
Resolves: RHEL-107595, RHEL-111037, RHEL-114695, RHEL-114712
|
||||
|
||||
* Tue Sep 30 2025 CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com> [6.12.0-55.38.1.el10_0]
|
||||
- hv_netvsc: Fix panic during namespace deletion with VF (Maxim Levitsky) [RHEL-114930]
|
||||
- RDMA/mana_ib: Fix DSCP value in modify QP (Maxim Levitsky) [RHEL-114930]
|
||||
|
@ -341,20 +341,28 @@ snd_pcm_chmap_elem *convert_chmap_v3(struct uac3_cluster_header_descriptor
|
||||
|
||||
len = le16_to_cpu(cluster->wLength);
|
||||
c = 0;
|
||||
p += sizeof(struct uac3_cluster_header_descriptor);
|
||||
p += sizeof(*cluster);
|
||||
len -= sizeof(*cluster);
|
||||
|
||||
while (((p - (void *)cluster) < len) && (c < channels)) {
|
||||
while (len > 0 && (c < channels)) {
|
||||
struct uac3_cluster_segment_descriptor *cs_desc = p;
|
||||
u16 cs_len;
|
||||
u8 cs_type;
|
||||
|
||||
if (len < sizeof(*cs_desc))
|
||||
break;
|
||||
cs_len = le16_to_cpu(cs_desc->wLength);
|
||||
if (len < cs_len)
|
||||
break;
|
||||
cs_type = cs_desc->bSegmentType;
|
||||
|
||||
if (cs_type == UAC3_CHANNEL_INFORMATION) {
|
||||
struct uac3_cluster_information_segment_descriptor *is = p;
|
||||
unsigned char map;
|
||||
|
||||
if (cs_len < sizeof(*is))
|
||||
break;
|
||||
|
||||
/*
|
||||
* TODO: this conversion is not complete, update it
|
||||
* after adding UAC3 values to asound.h
|
||||
@ -456,6 +464,7 @@ snd_pcm_chmap_elem *convert_chmap_v3(struct uac3_cluster_header_descriptor
|
||||
chmap->map[c++] = map;
|
||||
}
|
||||
p += cs_len;
|
||||
len -= cs_len;
|
||||
}
|
||||
|
||||
if (channels < c)
|
||||
@ -880,7 +889,7 @@ snd_usb_get_audioformat_uac3(struct snd_usb_audio *chip,
|
||||
u64 badd_formats = 0;
|
||||
unsigned int num_channels;
|
||||
struct audioformat *fp;
|
||||
u16 cluster_id, wLength;
|
||||
u16 cluster_id, wLength, cluster_wLength;
|
||||
int clock = 0;
|
||||
int err;
|
||||
|
||||
@ -1008,6 +1017,16 @@ snd_usb_get_audioformat_uac3(struct snd_usb_audio *chip,
|
||||
return ERR_PTR(-EIO);
|
||||
}
|
||||
|
||||
cluster_wLength = le16_to_cpu(cluster->wLength);
|
||||
if (cluster_wLength < sizeof(*cluster) ||
|
||||
cluster_wLength > wLength) {
|
||||
dev_err(&dev->dev,
|
||||
"%u:%d : invalid Cluster Descriptor size\n",
|
||||
iface_no, altno);
|
||||
kfree(cluster);
|
||||
return ERR_PTR(-EIO);
|
||||
}
|
||||
|
||||
num_channels = cluster->bNrChannels;
|
||||
chmap = convert_chmap_v3(cluster);
|
||||
kfree(cluster);
|
||||
|
@ -221,6 +221,17 @@ static bool validate_uac3_feature_unit(const void *p,
|
||||
return d->bLength >= sizeof(*d) + 4 + 2;
|
||||
}
|
||||
|
||||
static bool validate_uac3_power_domain_unit(const void *p,
|
||||
const struct usb_desc_validator *v)
|
||||
{
|
||||
const struct uac3_power_domain_descriptor *d = p;
|
||||
|
||||
if (d->bLength < sizeof(*d))
|
||||
return false;
|
||||
/* baEntities[] + wPDomainDescrStr */
|
||||
return d->bLength >= sizeof(*d) + d->bNrEntities + 2;
|
||||
}
|
||||
|
||||
static bool validate_midi_out_jack(const void *p,
|
||||
const struct usb_desc_validator *v)
|
||||
{
|
||||
@ -285,6 +296,7 @@ static const struct usb_desc_validator audio_validators[] = {
|
||||
struct uac3_clock_multiplier_descriptor),
|
||||
/* UAC_VERSION_3, UAC3_SAMPLE_RATE_CONVERTER: not implemented yet */
|
||||
/* UAC_VERSION_3, UAC3_CONNECTORS: not implemented yet */
|
||||
FUNC(UAC_VERSION_3, UAC3_POWER_DOMAIN, validate_uac3_power_domain_unit),
|
||||
{ } /* terminator */
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user