Linux 6.3.12
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.3.12 kernel.
All users of the 6.3 kernel series must upgrade.
The updated 6.3.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.3.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
------------
Documentation/process/changes.rst | 7 ++++ Makefile | 2 - drivers/cxl/core/pci.c | 27 ++------------- drivers/cxl/cxl.h | 1 drivers/cxl/port.c | 14 ++------ drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 4 ++ drivers/gpu/drm/amd/display/dc/core/dc.c | 49 +++++++++++++++++----------- drivers/md/dm-ioctl.c | 33 ++++++++++++------- drivers/nubus/proc.c | 22 +++++++++--- drivers/pci/pci-acpi.c | 53 +++++++++++++++++++++++-------- fs/nfs/inode.c | 2 - include/linux/mm.h | 4 +- mm/nommu.c | 7 +++- scripts/tags.sh | 9 ++++- tools/testing/cxl/Kbuild | 1 tools/testing/cxl/test/mock.c | 15 -------- 16 files changed, 147 insertions(+), 103 deletions(-)
Ahmed S. Darwish (2):
scripts/tags.sh: Resolve gtags empty index generation
docs: Set minimal gtags / GNU GLOBAL version to 6.6.5
Aric Cyr (1):
drm/amd/display: Do not update DRR while BW optimizations pending
Bas Nieuwenhuizen (1):
drm/amdgpu: Validate VM ioctl flags.
Bjorn Helgaas (1):
PCI/ACPI: Validate acpi_pci_set_power_state() parameter
Dan Williams (1):
Revert "cxl/port: Enable the HDM decoder capability for switch ports"
Demi Marie Obenour (1):
dm ioctl: Avoid double-fetch of version
Finn Thain (1):
nubus: Partially revert proc_create_single_data() conversion
Greg Kroah-Hartman (1):
Linux 6.3.12
Jeff Layton (1):
nfs: don't report STATX_BTIME in ->getattr
Linus Torvalds (1):
execve: always mark stack as growing down during early stack setup
Mario Limonciello (1):
PCI/ACPI: Call _REG when transitioning D-states
Max Filippov (1):
xtensa: fix lock_mm_and_find_vma in case VMA not found
Rodrigo Siqueira (1):
drm/amd/display: Ensure vmin and vmax adjust for DCE
Greg Kroah-Hartman
maintainerDocumentation/process/changes.rst +7 -0
@@ -60,6 +60,7 @@ openssl & libcrypto 1.0.0 openssl version bc 1.06.95 bc --version Sphinx\ [#f1]_ 1.7 sphinx-build --version cpio any cpio --version +gtags (optional) 6.6.5 gtags --version ====================== =============== ======================================== .. [#f1] Sphinx is needed only to build the Kernel documentation
@@ -174,6 +175,12 @@ You will need openssl to build kernels 3.7 and higher if module signing is enabled. You will also need openssl development packages to build kernels 4.3 and higher. +gtags / GNU GLOBAL (optional) +----------------------------- + +The kernel build requires GNU GLOBAL version 6.6.5 or later to generate +tag files through ``make gtags``. This is due to its use of the gtags +``-C (--directory)`` flag. System utilities ****************
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 3 -SUBLEVEL = 11 +SUBLEVEL = 12 EXTRAVERSION = NAME = Hurr durr I'ma ninja sloth
drivers/cxl/core/pci.c +4 -23
@@ -308,36 +308,17 @@ static void disable_hdm(void *_cxlhdm) hdm + CXL_HDM_DECODER_CTRL_OFFSET); } -int devm_cxl_enable_hdm (struct cxl_port *port,struct cxl_hdm *cxlhdm) +static int devm_cxl_enable_hdm (struct device *host,struct cxl_hdm *cxlhdm) { -void __iomem *hdm; +void __iomem *hdm = cxlhdm->regs.hdm_decoder;u32 global_ctrl; -/* -* If the hdm capability was not mapped there is nothing to enable and -* the caller is responsible for what happens next. For example, -* emulate a passthrough decoder. -*/ -if (IS_ERR (cxlhdm)) -return 0 ; - - hdm = cxlhdm->regs.hdm_decoder; global_ctrl =readl (hdm +CXL_HDM_DECODER_CTRL_OFFSET ); - -/* -* If the HDM decoder capability was enabled on entry, skip -* registering disable_hdm() since this decode capability may be -* owned by platform firmware. -*/ -if (global_ctrl &CXL_HDM_DECODER_ENABLE ) -return 0 ; -writel (global_ctrl |CXL_HDM_DECODER_ENABLE , hdm +CXL_HDM_DECODER_CTRL_OFFSET ); -return devm_add_action_or_reset (&port->dev, disable_hdm, cxlhdm); +return devm_add_action_or_reset (host, disable_hdm, cxlhdm); } -EXPORT_SYMBOL_NS_GPL (devm_cxl_enable_hdm,CXL );int cxl_dvsec_rr_decode (struct device *dev,int d,struct cxl_endpoint_dvsec_info *info)
@@ -511,7 +492,7 @@ int cxl_hdm_decode_init(struct cxl_dev_state *cxlds, struct cxl_hdm *cxlhdm,if (info->mem_enabled)return 0 ; - rc =devm_cxl_enable_hdm (port, cxlhdm); + rc =devm_cxl_enable_hdm (&port->dev, cxlhdm);if (rc)return rc;
drivers/cxl/cxl.h +0 -1
@@ -710,7 +710,6 @@ struct cxl_endpoint_dvsec_info {struct cxl_hdm ;struct cxl_hdm *devm_cxl_setup_hdm (struct cxl_port *port,struct cxl_endpoint_dvsec_info *info); -int devm_cxl_enable_hdm (struct cxl_port *port,struct cxl_hdm *cxlhdm);int devm_cxl_enumerate_decoders (struct cxl_hdm *cxlhdm,struct cxl_endpoint_dvsec_info *info);int devm_cxl_add_passthrough_decoder (struct cxl_port *port);
drivers/cxl/port.c +5 -9
@@ -60,17 +60,13 @@ static int discover_region(struct device *dev, void *root)static int cxl_switch_port_probe (struct cxl_port *port) {struct cxl_hdm *cxlhdm; -int rc, nr_dports; - - nr_dports =devm_cxl_port_enumerate_dports (port); -if (nr_dports <0 ) -return nr_dports; +int rc; - cxlhdm =devm_cxl_setup_hdm (port,NULL ); - rc =devm_cxl_enable_hdm (port, cxlhdm); -if (rc) + rc =devm_cxl_port_enumerate_dports (port); +if (rc <0 )return rc; + cxlhdm =devm_cxl_setup_hdm (port,NULL );if (!IS_ERR (cxlhdm))return devm_cxl_enumerate_decoders (cxlhdm,NULL );
@@ -79,7 +75,7 @@ static int cxl_switch_port_probe(struct cxl_port *port)return PTR_ERR (cxlhdm); } -if (nr_dports ==1 ) { +if (rc ==1 ) {dev_dbg (&port->dev,"Fallback to passthrough decoder\n" );return devm_cxl_add_passthrough_decoder (port); }
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +4 -0
@@ -2371,6 +2371,10 @@ int amdgpu_vm_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)struct amdgpu_fpriv *fpriv = filp->driver_priv;int r; +/* No valid flags defined yet */ +if (args->in.flags) +return -EINVAL ; +switch (args->in.op) {case AMDGPU_VM_OP_RESERVE_VMID :/* We only have requirement to reserve vmid from gfxhub */
drivers/gpu/drm/amd/display/dc/core/dc.c +30 -19
75 lines not on this page · raw message
drivers/md/dm-ioctl.c +21 -12
@@ -1830,30 +1830,36 @@ static ioctl_fn lookup_ioctl(unsigned int cmd, int *ioctl_flags)* As well as checking the version compatibility this always * copies the kernel interface version out. */ -static int check_version (unsigned int cmd,struct dm_ioctl __user *user) +static int check_version (unsigned int cmd,struct dm_ioctl __user *user, +struct dm_ioctl *kernel_params) { -uint32_t version[3 ];int r =0 ; -if (copy_from_user (version, user->version,sizeof (version))) +/* Make certain version is first member of dm_ioctl struct */ +BUILD_BUG_ON (offsetof(struct dm_ioctl , version) !=0 ); + +if (copy_from_user (kernel_params->version, user->version,sizeof (kernel_params->version)))return -EFAULT ; -if ((version[0 ] !=DM_VERSION_MAJOR ) || - (version[1 ] >DM_VERSION_MINOR )) { +if ((kernel_params->version[0 ] !=DM_VERSION_MAJOR ) || + (kernel_params->version[1 ] >DM_VERSION_MINOR )) {DMERR ("ioctl interface mismatch: kernel(%u.%u.%u), user(%u.%u.%u), cmd(%d)" ,DM_VERSION_MAJOR ,DM_VERSION_MINOR ,DM_VERSION_PATCHLEVEL , - version[0 ], version[1 ], version[2 ], cmd); + kernel_params->version[0 ], + kernel_params->version[1 ], + kernel_params->version[2 ], + cmd); r = -EINVAL ; }/* * Fill in the kernel version. */ - version[0 ] =DM_VERSION_MAJOR ; - version[1 ] =DM_VERSION_MINOR ; - version[2 ] =DM_VERSION_PATCHLEVEL ; -if (copy_to_user (user->version, version,sizeof (version))) + kernel_params->version[0 ] =DM_VERSION_MAJOR ; + kernel_params->version[1 ] =DM_VERSION_MINOR ; + kernel_params->version[2 ] =DM_VERSION_PATCHLEVEL ; +if (copy_to_user (user->version, kernel_params->version,sizeof (kernel_params->version)))return -EFAULT ;return r;
@@ -1879,7 +1885,10 @@ static int copy_params(struct dm_ioctl __user *user, struct dm_ioctl *param_kernconst size_t minimum_data_size = offsetof(struct dm_ioctl , data);unsigned int noio_flag; -if (copy_from_user (param_kernel, user, minimum_data_size)) +/* check_version() already copied version from userspace, avoid TOCTOU */ +if (copy_from_user ((char *)param_kernel +sizeof (param_kernel->version), + (char __user *)user +sizeof (param_kernel->version), + minimum_data_size -sizeof (param_kernel->version)))return -EFAULT ;if (param_kernel->data_size < minimum_data_size) {
@@ -1991,7 +2000,7 @@ static int ctl_ioctl(struct file *file, uint command, struct dm_ioctl __user *us* Check the interface version passed in. This also * writes out the kernel's interface version. */ - r =check_version (cmd, user); + r =check_version (cmd, user, ¶m_kernel);if (r)return r;
drivers/nubus/proc.c +17 -5
@@ -137,6 +137,18 @@ static int nubus_proc_rsrc_show(struct seq_file *m, void *v)return 0 ; } +static int nubus_rsrc_proc_open (struct inode *inode,struct file *file) +{ +return single_open (file, nubus_proc_rsrc_show, inode); +} + +static const struct proc_ops nubus_rsrc_proc_ops = { + .proc_open = nubus_rsrc_proc_open, + .proc_read = seq_read, + .proc_lseek = seq_lseek, + .proc_release = single_release, +}; +void nubus_proc_add_rsrc_mem (struct proc_dir_entry *procdir,const struct nubus_dirent *ent,unsigned int size)
@@ -152,8 +164,8 @@ void nubus_proc_add_rsrc_mem(struct proc_dir_entry *procdir, pded =nubus_proc_alloc_pde_data (nubus_dirptr (ent), size); else pded =NULL ; -proc_create_single_data (name,S_IFREG |0444 , procdir, - nubus_proc_rsrc_show, pded); +proc_create_data (name,S_IFREG |0444 , procdir, + &nubus_rsrc_proc_ops, pded); } void nubus_proc_add_rsrc(struct proc_dir_entry *procdir,
@@ -166,9 +178,9 @@ void nubus_proc_add_rsrc(struct proc_dir_entry *procdir,return ;snprintf (name,sizeof (name),"%x" , ent->type); -proc_create_single_data (name,S_IFREG |0444 , procdir, - nubus_proc_rsrc_show, -nubus_proc_alloc_pde_data (data,0 )); +proc_create_data (name,S_IFREG |0444 , procdir, + &nubus_rsrc_proc_ops, +nubus_proc_alloc_pde_data (data,0 )); }/*
drivers/pci/pci-acpi.c +40 -13
78 lines not on this page · raw message
fs/nfs/inode.c +1 -1
@@ -845,7 +845,7 @@ int nfs_getattr(struct mnt_idmap *idmap, const struct path *path, request_mask &=STATX_TYPE |STATX_MODE |STATX_NLINK |STATX_UID |STATX_GID |STATX_ATIME |STATX_MTIME |STATX_CTIME | -STATX_INO |STATX_SIZE |STATX_BLOCKS |STATX_BTIME | +STATX_INO |STATX_SIZE |STATX_BLOCKS |STATX_CHANGE_COOKIE ;if ((query_flags &AT_STATX_DONT_SYNC ) && !force_sync) {
include/linux/mm.h +3 -1
@@ -384,7 +384,7 @@ extern unsigned int kobjsize(const void *objp);#endif /* CONFIG_HAVE_ARCH_USERFAULTFD_MINOR */ /* Bits set in the VMA until the stack is in its final location */ -#define VM_STACK_INCOMPLETE_SETUP (VM_RAND_READ | VM_SEQ_READ) +#define VM_STACK_INCOMPLETE_SETUP (VM_RAND_READ | VM_SEQ_READ | VM_STACK_EARLY)#define TASK_EXEC ((current->personality & READ_IMPLIES_EXEC) ? VM_EXEC : 0)
@@ -406,8 +406,10 @@ extern unsigned int kobjsize(const void *objp);#ifdef CONFIG_STACK_GROWSUP #define VM_STACK VM_GROWSUP +#define VM_STACK_EARLY VM_GROWSDOWN#else #define VM_STACK VM_GROWSDOWN +#define VM_STACK_EARLY 0#endif #define VM_STACK_FLAGS (VM_STACK | VM_STACK_DEFAULT_FLAGS | VM_ACCOUNT)
mm/nommu.c +6 -1
@@ -637,8 +637,13 @@ EXPORT_SYMBOL(find_vma);struct vm_area_struct *lock_mm_and_find_vma (struct mm_struct *mm,unsigned long addr,struct pt_regs *regs) { +struct vm_area_struct *vma; +mmap_read_lock (mm); -return vma_lookup (mm, addr); + vma =vma_lookup (mm, addr); +if (!vma) +mmap_read_unlock (mm); +return vma; }/*
scripts/tags.sh +8 -1
@@ -32,6 +32,13 @@ else tree=${srctree}/ fi +# gtags(1) refuses to index any file outside of its current working dir. +# If gtags indexing is requested and the build output directory is not +# the kernel source tree, index all files in absolute-path form. +if [[ "$1" == "gtags" && -n "${tree}" ]]; then + tree=$(realpath "$tree")/ +fi + # Detect if ALLSOURCE_ARCHS is set. If not, we assume SRCARCH if [ "${ALLSOURCE_ARCHS}" = "" ]; then ALLSOURCE_ARCHS=${SRCARCH}
@@ -131,7 +138,7 @@ docscope() dogtags() { - all_target_sources | gtags -i -f - + all_target_sources | gtags -i -C "${tree:-.}" -f - "$PWD" } # Basic regular expressions with an optional /kind-spec/ for ctags and
tools/testing/cxl/Kbuild +0 -1
@@ -6,7 +6,6 @@ ldflags-y += --wrap=acpi_pci_find_root ldflags-y += --wrap=nvdimm_bus_register ldflags-y += --wrap=devm_cxl_port_enumerate_dports ldflags-y += --wrap=devm_cxl_setup_hdm -ldflags-y += --wrap=devm_cxl_enable_hdm ldflags-y += --wrap=devm_cxl_add_passthrough_decoder ldflags-y += --wrap=devm_cxl_enumerate_decoders ldflags-y += --wrap=cxl_await_media_ready
tools/testing/cxl/test/mock.c +0 -15
@@ -149,21 +149,6 @@ struct cxl_hdm *__wrap_devm_cxl_setup_hdm(struct cxl_port *port, }EXPORT_SYMBOL_NS_GPL (__wrap_devm_cxl_setup_hdm,CXL ); -int __wrap_devm_cxl_enable_hdm (struct cxl_port *port,struct cxl_hdm *cxlhdm) -{ -int index, rc; -struct cxl_mock_ops *ops =get_cxl_mock_ops (&index); - -if (ops && ops->is_mock_port (port->uport)) - rc =0 ; -else - rc =devm_cxl_enable_hdm (port, cxlhdm); -put_cxl_mock_ops (index); - -return rc; -} -EXPORT_SYMBOL_NS_GPL (__wrap_devm_cxl_enable_hdm,CXL ); -int __wrap_devm_cxl_add_passthrough_decoder (struct cxl_port *port) {int rc, index;