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

Merge tag 'for-linus-6.0-rc3-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/xen/tip

Pull xen fixes from Juergen Gross:

- two minor cleanups

- a fix of the xen/privcmd driver avoiding a possible NULL dereference
in an error case

* tag 'for-linus-6.0-rc3-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/xen/tip:
xen/privcmd: fix error exit of privcmd_ioctl_dm_op()
xen: move from strlcpy with unused retval to strscpy
xen: x86: remove setting the obsolete config XEN_MAX_DOMAIN_MEMORY

+13 -13
-1
arch/x86/configs/xen.config
··· 14 14 15 15 # x86 xen specific config options 16 16 CONFIG_XEN_PVH=y 17 - CONFIG_XEN_MAX_DOMAIN_MEMORY=500 18 17 CONFIG_XEN_SAVE_RESTORE=y 19 18 # CONFIG_XEN_DEBUG_FS is not set 20 19 CONFIG_XEN_MCE_LOG=y
+11 -10
drivers/xen/privcmd.c
··· 581 581 struct privcmd_dm_op_buf kbufs[], unsigned int num, 582 582 struct page *pages[], unsigned int nr_pages, unsigned int *pinned) 583 583 { 584 - unsigned int i; 584 + unsigned int i, off = 0; 585 585 586 - for (i = 0; i < num; i++) { 586 + for (i = 0; i < num; ) { 587 587 unsigned int requested; 588 588 int page_count; 589 589 590 590 requested = DIV_ROUND_UP( 591 591 offset_in_page(kbufs[i].uptr) + kbufs[i].size, 592 - PAGE_SIZE); 592 + PAGE_SIZE) - off; 593 593 if (requested > nr_pages) 594 594 return -ENOSPC; 595 595 596 596 page_count = pin_user_pages_fast( 597 - (unsigned long) kbufs[i].uptr, 597 + (unsigned long)kbufs[i].uptr + off * PAGE_SIZE, 598 598 requested, FOLL_WRITE, pages); 599 - if (page_count < 0) 600 - return page_count; 599 + if (page_count <= 0) 600 + return page_count ? : -EFAULT; 601 601 602 602 *pinned += page_count; 603 603 nr_pages -= page_count; 604 604 pages += page_count; 605 + 606 + off = (requested == page_count) ? 0 : off + page_count; 607 + i += !off; 605 608 } 606 609 607 610 return 0; ··· 680 677 } 681 678 682 679 rc = lock_pages(kbufs, kdata.num, pages, nr_pages, &pinned); 683 - if (rc < 0) { 684 - nr_pages = pinned; 680 + if (rc < 0) 685 681 goto out; 686 - } 687 682 688 683 for (i = 0; i < kdata.num; i++) { 689 684 set_xen_guest_handle(xbufs[i].h, kbufs[i].uptr); ··· 693 692 xen_preemptible_hcall_end(); 694 693 695 694 out: 696 - unlock_pages(pages, nr_pages); 695 + unlock_pages(pages, pinned); 697 696 kfree(xbufs); 698 697 kfree(pages); 699 698 kfree(kbufs);
+1 -1
drivers/xen/xen-scsiback.c
··· 1121 1121 "%s: writing %s", __func__, state); 1122 1122 return; 1123 1123 } 1124 - strlcpy(phy, val, VSCSI_NAMELEN); 1124 + strscpy(phy, val, VSCSI_NAMELEN); 1125 1125 kfree(val); 1126 1126 1127 1127 /* virtual SCSI device */
+1 -1
drivers/xen/xenbus/xenbus_probe_frontend.c
··· 40 40 return -EINVAL; 41 41 } 42 42 43 - strlcpy(bus_id, nodename + 1, XEN_BUS_ID_SIZE); 43 + strscpy(bus_id, nodename + 1, XEN_BUS_ID_SIZE); 44 44 if (!strchr(bus_id, '/')) { 45 45 pr_warn("bus_id %s no slash\n", bus_id); 46 46 return -EINVAL;