Linux 5.15.62
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.15.62 kernel.
All users of the 5.15 kernel series must upgrade.
The updated 5.15.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.15.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 arch/x86/kernel/ftrace.c | 7 -- arch/x86/kernel/ftrace_64.S | 19 +++++- drivers/tee/tee_shm.c | 3 + fs/btrfs/raid56.c | 74 +++++++++++++++++++------ fs/io_uring.c | 2 fs/ksmbd/smb2misc.c | 7 +- fs/ksmbd/smb2pdu.c | 45 +++++++++------ fs/ksmbd/smbacl.c | 130 +++++++++++++++++++++++++++++--------------- fs/ksmbd/smbacl.h | 2 fs/ksmbd/vfs.c | 5 + net/sched/cls_route.c | 10 +++ 12 files changed, 215 insertions(+), 91 deletions(-)
Greg Kroah-Hartman (1):
Linux 5.15.62
Hyunchul Lee (1):
ksmbd: prevent out of bound read for SMB2_WRITE
Jamal Hadi Salim (1):
net_sched: cls_route: disallow handle of 0
Jens Axboe (1):
io_uring: use original request task for inflight tracking
Jens Wiklander (1):
tee: add overflow check in register_shm_helper()
Namjae Jeon (1):
ksmbd: fix heap-based overflow in set_ntacl_dacl()
Peter Zijlstra (2):
x86/ibt,ftrace: Make function-graph play nice x86/ftrace: Use alternative RET encoding
Qu Wenruo (2):
btrfs: only write the sectors in the vertical stripe which has data stripes
btrfs: raid56: don't trust any cached sector in __raid56_parity_recover()
Thadeu Lima de Souza Cascardo (1):
Revert "x86/ftrace: Use alternative RET encoding"
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 15 -SUBLEVEL = 61 +SUBLEVEL = 62 EXTRAVERSION = NAME = Trick or Treat
arch/x86/kernel/ftrace.c +2 -5
@@ -322,12 +322,12 @@ create_trampoline(struct ftrace_ops *ops, unsigned int *tramp_size)unsigned long offset;unsigned long npages;unsigned long size; -unsigned long retq;unsigned long *ptr;void *trampoline;void *ip;/* 48 8b 15 <offset> is movq <offset>(%rip), %rdx */ unsigned const char op_ref[] = {0x48 ,0x8b ,0x15 }; +unsigned const char retq[] = {RET_INSN_OPCODE ,INT3_INSN_OPCODE };union ftrace_op_code_union op_ptr;int ret;
@@ -367,13 +367,10 @@ create_trampoline(struct ftrace_ops *ops, unsigned int *tramp_size) ip = trampoline + size;/* The trampoline ends with ret(q) */ - retq = (unsigned long )ftrace_stub;if (cpu_feature_enabled (X86_FEATURE_RETHUNK ))memcpy (ip,text_gen_insn (JMP32_INSN_OPCODE , ip, &__x86_return_thunk),JMP32_INSN_SIZE );else - ret =copy_from_kernel_nofault (ip, (void *)retq,RET_SIZE ); -if (WARN_ON (ret <0 )) - goto fail; +memcpy (ip, retq,sizeof (retq));/* No need to test direct calls on created trampolines */ if (ops->flags &FTRACE_OPS_FL_SAVE_REGS ) {
arch/x86/kernel/ftrace_64.S +15 -4
@@ -181,7 +181,6 @@ SYM_INNER_LABEL(ftrace_graph_call, SYM_L_GLOBAL) /* * This is weak to keep gas from relaxing the jumps. - * It is also used to copy the RET for trampolines. */ SYM_INNER_LABEL_ALIGN(ftrace_stub, SYM_L_WEAK) UNWIND_HINT_FUNC
@@ -335,7 +334,7 @@ SYM_FUNC_START(ftrace_graph_caller) SYM_FUNC_END(ftrace_graph_caller) SYM_FUNC_START(return_to_handler) - subq $24, %rsp + subq $16, %rsp /* Save the return values */ movq %rax, (%rsp)
@@ -347,7 +346,19 @@ SYM_FUNC_START(return_to_handler) movq %rax, %rdi movq 8(%rsp), %rdx movq (%rsp), %rax - addq $24, %rsp - JMP_NOSPEC rdi + + addq $16, %rsp + /* + * Jump back to the old return address. This cannot be JMP_NOSPEC rdi + * since IBT would demand that contain ENDBR, which simply isn't so for + * return addresses. Use a retpoline here to keep the RSB balanced. + */ + ANNOTATE_INTRA_FUNCTION_CALL + call .Ldo_rop + int3 +.Ldo_rop: + mov %rdi, (%rsp) + UNWIND_HINT_FUNC + RET SYM_FUNC_END(return_to_handler) #endif
drivers/tee/tee_shm.c +3 -0
@@ -222,6 +222,9 @@ struct tee_shm *tee_shm_register(struct tee_context *ctx, unsigned long addr, goto err; } +if (!access_ok ((void __user *)addr, length)) +return ERR_PTR (-EFAULT ); +mutex_lock (&teedev->mutex); shm->id =idr_alloc (&teedev->idr, shm,1 ,0 ,GFP_KERNEL );mutex_unlock (&teedev->mutex);
fs/btrfs/raid56.c +57 -17
135 lines not on this page · raw message
fs/io_uring.c +1 -1
@@ -1405,7 +1405,7 @@ static void io_req_track_inflight(struct io_kiocb *req) {if (!(req->flags &REQ_F_INFLIGHT )) { req->flags |=REQ_F_INFLIGHT ; -atomic_inc (¤t->io_uring->inflight_tracked); +atomic_inc (&req->task->io_uring->inflight_tracked); } }
fs/ksmbd/smb2misc.c +5 -2
@@ -132,8 +132,11 @@ static int smb2_get_data_area_len(unsigned int *off, unsigned int *len, *len =le16_to_cpu (((struct smb2_read_req *)hdr)->ReadChannelInfoLength);break ;case SMB2_WRITE : -if (((struct smb2_write_req *)hdr)->DataOffset) { - *off =le16_to_cpu (((struct smb2_write_req *)hdr)->DataOffset); +if (((struct smb2_write_req *)hdr)->DataOffset || + ((struct smb2_write_req *)hdr)->Length) { + *off = max_t(unsigned int, +le16_to_cpu (((struct smb2_write_req *)hdr)->DataOffset), + offsetof(struct smb2_write_req , Buffer) -4 ); *len =le32_to_cpu (((struct smb2_write_req *)hdr)->Length);break ; }
fs/ksmbd/smb2pdu.c +27 -18
89 lines not on this page · raw message
fs/ksmbd/smbacl.c +88 -42
238 lines not on this page · raw message
fs/ksmbd/smbacl.h +1 -1
@@ -193,7 +193,7 @@ struct posix_acl_state {int parse_sec_desc (struct user_namespace *user_ns,struct smb_ntsd *pntsd,int acl_len,struct smb_fattr *fattr);int build_sec_desc (struct user_namespace *user_ns,struct smb_ntsd *pntsd, -struct smb_ntsd *ppntsd,int addition_info, +struct smb_ntsd *ppntsd,int ppntsd_size,int addition_info,__u32 *secdesclen,struct smb_fattr *fattr);int init_acl_state (struct posix_acl_state *state,int cnt);void free_acl_state (struct posix_acl_state *state);
fs/ksmbd/vfs.c +5 -0
@@ -1543,6 +1543,11 @@ int ksmbd_vfs_get_sd_xattr(struct ksmbd_conn *conn, } *pntsd = acl.sd_buf; +if (acl.sd_size <sizeof (struct smb_ntsd )) { +pr_err ("sd size is invalid\n" ); + goto out_free; + } + (*pntsd)->osidoffset =cpu_to_le32 (le32_to_cpu ((*pntsd)->osidoffset) -NDR_NTSD_OFFSETOF ); (*pntsd)->gsidoffset = cpu_to_le32(le32_to_cpu((*pntsd)->gsidoffset) -
net/sched/cls_route.c +10 -0
@@ -424,6 +424,11 @@ static int route4_set_parms(struct net *net, struct tcf_proto *tp,return -EINVAL ; } +if (!nhandle) { +NL_SET_ERR_MSG (extack,"Replacing with handle of 0 is invalid" ); +return -EINVAL ; + } + h1 =to_hash (nhandle); b =rtnl_dereference (head->table[h1]);if (!b) {
@@ -477,6 +482,11 @@ static int route4_change(struct net *net, struct sk_buff *in_skb,int err;bool new = true; +if (!handle) { +NL_SET_ERR_MSG (extack,"Creating with handle of 0 is invalid" ); +return -EINVAL ; + } +if (opt ==NULL )return handle ? -EINVAL :0 ;