Linux 6.18.26
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.18.26 kernel.
Only users of Xen in the 6.18 kernel series must upgrade.
The updated 6.18.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.18.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 +- drivers/xen/privcmd.c | 7 +++++++ drivers/xen/sys-hypervisor.c | 8 ++++++-- 3 files changed, 14 insertions(+), 3 deletions(-)
Greg Kroah-Hartman (1):
Linux 6.18.26
Juergen Gross (2):
xen/privcmd: fix double free via VMA splitting Buffer overflow in drivers/xen/sys-hypervisor.c
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 18 -SUBLEVEL = 25 +SUBLEVEL = 26 EXTRAVERSION = NAME = Baby Opossum Posse
drivers/xen/privcmd.c +7 -0
@@ -1619,6 +1619,12 @@ static void privcmd_close(struct vm_area_struct *vma)kvfree (pages); } +static int privcmd_may_split (struct vm_area_struct *area,unsigned long addr) +{ +/* Forbid splitting, avoids double free via privcmd_close(). */ +return -EINVAL ; +} +static vm_fault_t privcmd_fault (struct vm_fault *vmf) { printk(KERN_DEBUG "privcmd_fault: vma=%p %lx-%lx, pgoff=%lx, uv=%p\n",
@@ -1630,6 +1636,7 @@ static vm_fault_t privcmd_fault(struct vm_fault *vmf)static const struct vm_operations_struct privcmd_vm_ops = { .close = privcmd_close, + .may_split = privcmd_may_split, .fault = privcmd_fault };
drivers/xen/sys-hypervisor.c +6 -2
@@ -366,6 +366,8 @@ static ssize_t buildid_show(struct hyp_sysfs_attr *attr, char *buffer) ret =sprintf (buffer,"<denied>" );return ret; } +if (ret >PAGE_SIZE ) +return -ENOSPC ; buildid =kmalloc (sizeof (*buildid) + ret,GFP_KERNEL );if (!buildid)
@@ -373,8 +375,10 @@ static ssize_t buildid_show(struct hyp_sysfs_attr *attr, char *buffer) buildid->len = ret; ret =HYPERVISOR_xen_version (XENVER_build_id, buildid); -if (ret >0 ) - ret =sprintf (buffer,"%s" , buildid->buf); +if (ret >0 ) { +/* Build id is binary, not a string. */ +memcpy (buffer, buildid->buf, ret); + }kfree (buildid);return ret;