Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'acpi-5.18-rc1-2' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm

Pull more ACPI updates from Rafael Wysocki:
"These are fixes and cleanup on top of the previously merged ACPI
material.

Specifics:

- Avoid out-of-bounds access when parsing _CPC data (Rafael Wysocki)

- Change default error code and clean up debug messages in ACPI CPPC
probe (Rafael Wysocki)

- Replace usage of found with dedicated list iterator variable in the
ACPI IPMI driver (Jakob Koschel)

- Clean up variable name confusion in APEI (Jakob Koschel)

- Make LAPIC_ADDR_OVR address readable in a message parsed during
MADT parsing (Vasant Hegde)"

* tag 'acpi-5.18-rc1-2' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm:
ACPI: CPPC: Change default error code and clean up debug messages in probe
ACPI: CPPC: Avoid out of bounds access when parsing _CPC data
ACPI: tables: Make LAPIC_ADDR_OVR address readable in message
ACPI: IPMI: replace usage of found with dedicated list iterator variable
ACPI, APEI: Use the correct variable for sizeof()

+41 -36
+18 -21
drivers/acpi/acpi_ipmi.c
··· 353 353 static void ipmi_cancel_tx_msg(struct acpi_ipmi_device *ipmi, 354 354 struct acpi_ipmi_msg *msg) 355 355 { 356 - struct acpi_ipmi_msg *tx_msg, *temp; 357 - bool msg_found = false; 356 + struct acpi_ipmi_msg *tx_msg = NULL, *iter, *temp; 358 357 unsigned long flags; 359 358 360 359 spin_lock_irqsave(&ipmi->tx_msg_lock, flags); 361 - list_for_each_entry_safe(tx_msg, temp, &ipmi->tx_msg_list, head) { 362 - if (msg == tx_msg) { 363 - msg_found = true; 364 - list_del(&tx_msg->head); 360 + list_for_each_entry_safe(iter, temp, &ipmi->tx_msg_list, head) { 361 + if (msg == iter) { 362 + tx_msg = iter; 363 + list_del(&iter->head); 365 364 break; 366 365 } 367 366 } 368 367 spin_unlock_irqrestore(&ipmi->tx_msg_lock, flags); 369 368 370 - if (msg_found) 369 + if (tx_msg) 371 370 acpi_ipmi_msg_put(tx_msg); 372 371 } 373 372 374 373 static void ipmi_msg_handler(struct ipmi_recv_msg *msg, void *user_msg_data) 375 374 { 376 375 struct acpi_ipmi_device *ipmi_device = user_msg_data; 377 - bool msg_found = false; 378 - struct acpi_ipmi_msg *tx_msg, *temp; 376 + struct acpi_ipmi_msg *tx_msg = NULL, *iter, *temp; 379 377 struct device *dev = ipmi_device->dev; 380 378 unsigned long flags; 381 379 ··· 385 387 } 386 388 387 389 spin_lock_irqsave(&ipmi_device->tx_msg_lock, flags); 388 - list_for_each_entry_safe(tx_msg, temp, &ipmi_device->tx_msg_list, head) { 389 - if (msg->msgid == tx_msg->tx_msgid) { 390 - msg_found = true; 391 - list_del(&tx_msg->head); 390 + list_for_each_entry_safe(iter, temp, &ipmi_device->tx_msg_list, head) { 391 + if (msg->msgid == iter->tx_msgid) { 392 + tx_msg = iter; 393 + list_del(&iter->head); 392 394 break; 393 395 } 394 396 } 395 397 spin_unlock_irqrestore(&ipmi_device->tx_msg_lock, flags); 396 398 397 - if (!msg_found) { 399 + if (!tx_msg) { 398 400 dev_warn(dev, 399 401 "Unexpected response (msg id %ld) is returned.\n", 400 402 msg->msgid); ··· 480 482 481 483 static void ipmi_bmc_gone(int iface) 482 484 { 483 - struct acpi_ipmi_device *ipmi_device, *temp; 484 - bool dev_found = false; 485 + struct acpi_ipmi_device *ipmi_device = NULL, *iter, *temp; 485 486 486 487 mutex_lock(&driver_data.ipmi_lock); 487 - list_for_each_entry_safe(ipmi_device, temp, 488 + list_for_each_entry_safe(iter, temp, 488 489 &driver_data.ipmi_devices, head) { 489 - if (ipmi_device->ipmi_ifnum != iface) { 490 - dev_found = true; 491 - __ipmi_dev_kill(ipmi_device); 490 + if (iter->ipmi_ifnum != iface) { 491 + ipmi_device = iter; 492 + __ipmi_dev_kill(iter); 492 493 break; 493 494 } 494 495 } ··· 497 500 struct acpi_ipmi_device, head); 498 501 mutex_unlock(&driver_data.ipmi_lock); 499 502 500 - if (dev_found) { 503 + if (ipmi_device) { 501 504 ipmi_flush_tx_msg(ipmi_device); 502 505 acpi_ipmi_dev_put(ipmi_device); 503 506 }
+1 -1
drivers/acpi/apei/apei-base.c
··· 319 319 if (res_ins) 320 320 list_add(&res_ins->list, res_list); 321 321 else { 322 - res_ins = kmalloc(sizeof(*res), GFP_KERNEL); 322 + res_ins = kmalloc(sizeof(*res_ins), GFP_KERNEL); 323 323 if (!res_ins) 324 324 return -ENOMEM; 325 325 res_ins->start = start;
+20 -12
drivers/acpi/cppc_acpi.c
··· 654 654 unsigned int num_ent, i, cpc_rev; 655 655 int pcc_subspace_id = -1; 656 656 acpi_status status; 657 - int ret = -EFAULT; 657 + int ret = -ENODATA; 658 658 659 659 if (osc_sb_cppc_not_supported) 660 660 return -ENODEV; ··· 679 679 cpc_obj = &out_obj->package.elements[0]; 680 680 if (cpc_obj->type == ACPI_TYPE_INTEGER) { 681 681 num_ent = cpc_obj->integer.value; 682 + if (num_ent <= 1) { 683 + pr_debug("Unexpected _CPC NumEntries value (%d) for CPU:%d\n", 684 + num_ent, pr->id); 685 + goto out_free; 686 + } 682 687 } else { 683 - pr_debug("Unexpected entry type(%d) for NumEntries\n", 684 - cpc_obj->type); 688 + pr_debug("Unexpected _CPC NumEntries entry type (%d) for CPU:%d\n", 689 + cpc_obj->type, pr->id); 685 690 goto out_free; 686 691 } 687 692 cpc_ptr->num_entries = num_ent; ··· 696 691 if (cpc_obj->type == ACPI_TYPE_INTEGER) { 697 692 cpc_rev = cpc_obj->integer.value; 698 693 } else { 699 - pr_debug("Unexpected entry type(%d) for Revision\n", 700 - cpc_obj->type); 694 + pr_debug("Unexpected _CPC Revision entry type (%d) for CPU:%d\n", 695 + cpc_obj->type, pr->id); 701 696 goto out_free; 702 697 } 703 698 cpc_ptr->version = cpc_rev; ··· 728 723 if (pcc_data_alloc(pcc_subspace_id)) 729 724 goto out_free; 730 725 } else if (pcc_subspace_id != gas_t->access_width) { 731 - pr_debug("Mismatched PCC ids.\n"); 726 + pr_debug("Mismatched PCC ids in _CPC for CPU:%d\n", 727 + pr->id); 732 728 goto out_free; 733 729 } 734 730 } else if (gas_t->space_id == ACPI_ADR_SPACE_SYSTEM_MEMORY) { ··· 748 742 * SystemIO doesn't implement 64-bit 749 743 * registers. 750 744 */ 751 - pr_debug("Invalid access width %d for SystemIO register\n", 752 - gas_t->access_width); 745 + pr_debug("Invalid access width %d for SystemIO register in _CPC\n", 746 + gas_t->access_width); 753 747 goto out_free; 754 748 } 755 749 if (gas_t->address & OVER_16BTS_MASK) { 756 750 /* SystemIO registers use 16-bit integer addresses */ 757 - pr_debug("Invalid IO port %llu for SystemIO register\n", 758 - gas_t->address); 751 + pr_debug("Invalid IO port %llu for SystemIO register in _CPC\n", 752 + gas_t->address); 759 753 goto out_free; 760 754 } 761 755 } else { 762 756 if (gas_t->space_id != ACPI_ADR_SPACE_FIXED_HARDWARE || !cpc_ffh_supported()) { 763 757 /* Support only PCC, SystemMemory, SystemIO, and FFH type regs. */ 764 - pr_debug("Unsupported register type: %d\n", gas_t->space_id); 758 + pr_debug("Unsupported register type (%d) in _CPC\n", 759 + gas_t->space_id); 765 760 goto out_free; 766 761 } 767 762 } ··· 770 763 cpc_ptr->cpc_regs[i-2].type = ACPI_TYPE_BUFFER; 771 764 memcpy(&cpc_ptr->cpc_regs[i-2].cpc_entry.reg, gas_t, sizeof(*gas_t)); 772 765 } else { 773 - pr_debug("Err in entry:%d in CPC table of CPU:%d\n", i, pr->id); 766 + pr_debug("Invalid entry type (%d) in _CPC for CPU:%d\n", 767 + i, pr->id); 774 768 goto out_free; 775 769 } 776 770 }
+2 -2
drivers/acpi/tables.c
··· 151 151 { 152 152 struct acpi_madt_local_apic_override *p = 153 153 (struct acpi_madt_local_apic_override *)header; 154 - pr_info("LAPIC_ADDR_OVR (address[%p])\n", 155 - (void *)(unsigned long)p->address); 154 + pr_info("LAPIC_ADDR_OVR (address[0x%llx])\n", 155 + p->address); 156 156 } 157 157 break; 158 158