4.14.12-stable review
Greg Kroah-Hartman
maintainerPATCH 1/14 exec: Weaken dumpability for secureexec
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Kees Cook <[email protected]>
commit e816c201aed5232171f8eb80b5d46ae6516683b9 upstream.
This is a logical revert of commit e37fdb785a5f ("exec: Use secureexec for setting dumpability")
This weakens dumpability back to checking only for uid/gid changes in current (which is useless), but userspace depends on dumpability not being tied to secureexec.
https://bugzilla.redhat.com/show_bug.cgi?id=1528633
--- fs/exec.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-)
fs/exec.c +7 -2
@@ -1350,9 +1350,14 @@ void setup_new_exec(struct linux_binprm current->sas_ss_sp = current->sas_ss_size =0 ; -/* Figure out dumpability. */ +/* +* Figure out dumpability. Note that this checking only of current +* is wrong, but userspace depends on it. This should be testing +* bprm->secureexec instead. +*/ if (bprm->interp_flags &BINPRM_FLAGS_ENFORCE_NONDUMP || - bprm->secureexec) + !(uid_eq (current_euid (),current_uid ()) && +gid_eq (current_egid (),current_gid ())))set_dumpable (current->mm, suid_dumpable);else set_dumpable (current->mm,SUID_DUMP_USER );
Greg Kroah-Hartman
maintainerPATCH 4/14 x86/pti: Make sure the user/kernel PTEs match
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Thomas Gleixner <[email protected]>
commit 52994c256df36fda9a715697431cba9daecb6b11 upstream.
Meelis reported that his K8 Athlon64 emits MCE warnings when PTI is enabled:
[Hardware Error]: Error Addr: 0x0000ffff81e000e0
[Hardware Error]: MC1 Error: L1 TLB multimatch.
[Hardware Error]: cache level: L1, tx: INSN
The address is in the entry area, which is mapped into kernel _AND_ user space. That's special because we switch CR3 while we are executing there.
User mapping:
0xffffffff81e00000-0xffffffff82000000 2M ro PSE GLB x pmd
Kernel mapping:
0xffffffff81000000-0xffffffff82000000 16M ro PSE x pmd
So the K8 is complaining that the TLB entries differ. They differ in the GLB bit.
Drop the GLB bit when installing the user shared mapping.
--- arch/x86/mm/pti.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
arch/x86/mm/pti.c +2 -1
@@ -367,7 +367,8 @@ static void __init pti_setup_espfix64(vostatic void __init pti_clone_entry_text (void ) {pti_clone_pmds ((unsigned long ) __entry_text_start, - (unsigned long ) __irqentry_text_end, _PAGE_RW); + (unsigned long ) __irqentry_text_end, + _PAGE_RW | _PAGE_GLOBAL); }/*
Greg Kroah-Hartman
maintainerPATCH 5/14 x86/dumpstack: Fix partial register dumps
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Josh Poimboeuf <[email protected]>
commit a9cdbe72c4e8bf3b38781c317a79326e2e1a230d upstream.
The show_regs_safe() logic is wrong. When there's an iret stack frame, it prints the entire pt_regs -- most of which is random stack data -- instead of just the five registers at the end.
show_regs_safe() is also poorly named: the on_stack() checks aren't for safety. Rename the function to show_regs_if_on_stack() and add a comment to explain why the checks are needed.
These issues were introduced with the "partial register dump" feature of the following commit:
b02fcf9ba121 ("x86/unwinder: Handle stack overflows more gracefully")
That patch had gone through a few iterations of development, and the above issues were artifacts from a previous iteration of the patch where 'regs' pointed directly to the iret frame rather than to the (partially empty) pt_regs.
--- arch/x86/include/asm/unwind.h | 17 +++++++++++++---- arch/x86/kernel/dumpstack.c | 28 ++++++++++++++++++++-------- arch/x86/kernel/stacktrace.c | 2 +- 3 files changed, 34 insertions(+), 13 deletions(-)
arch/x86/include/asm/unwind.h +13 -4
@@ -56,18 +56,27 @@ void unwind_start(struct unwind_state *s#if defined(CONFIG_UNWINDER_ORC ) || defined(CONFIG_UNWINDER_FRAME_POINTER )/* -* WARNING: The entire pt_regs may not be safe to dereference. In some cases, -* only the iret frame registers are accessible. Use with caution! +* If 'partial' returns true, only the iret frame registers are valid. */ -static inline struct pt_regs *unwind_get_entry_regs (struct unwind_state *state) +static inline struct pt_regs *unwind_get_entry_regs (struct unwind_state *state, +bool *partial) {if (unwind_done (state))return NULL ; +if (partial) { +#ifdef CONFIG_UNWINDER_ORC + *partial = !state->full_regs; +#else + *partial = false; +#endif + } +return state->regs; }#else -static inline struct pt_regs *unwind_get_entry_regs (struct unwind_state *state) +static inline struct pt_regs *unwind_get_entry_regs (struct unwind_state *state, +bool *partial) {return NULL ; }
arch/x86/kernel/dumpstack.c +20 -8
@@ -76,12 +76,23 @@ void show_iret_regs(struct pt_regs *regs regs->sp, regs->flags); } -static void show_regs_safe (struct stack_info *info,struct pt_regs *regs) +static void show_regs_if_on_stack (struct stack_info *info,struct pt_regs *regs, +bool partial) { -if (on_stack (info, regs,sizeof (*regs))) +/* +* These on_stack() checks aren't strictly necessary: the unwind code +* has already validated the 'regs' pointer. The checks are done for +* ordering reasons: if the registers are on the next stack, we don't +* want to print them out yet. Otherwise they'll be shown as part of +* the wrong stack. Later, when show_trace_log_lvl() switches to the +* next stack, this function will be called again with the same regs so +* they can be printed in the right context. +*/ +if (!partial &&on_stack (info, regs,sizeof (*regs))) {__show_regs (regs,0 ); -else if (on_stack (info, (void *)regs +IRET_FRAME_OFFSET , -IRET_FRAME_SIZE )) { + + }else if (partial &&on_stack (info, (void *)regs +IRET_FRAME_OFFSET , +IRET_FRAME_SIZE )) {/* * When an interrupt or exception occurs in entry code, the * full pt_regs might not have been saved yet. In that case
@@ -98,6 +109,7 @@ void show_trace_log_lvl(struct task_strustruct stack_info stack_info = {0 };unsigned long visit_mask =0 ;int graph_idx =0 ; +bool partial;printk ("%sCall Trace:\n" , log_lvl);
@@ -140,7 +152,7 @@ void show_trace_log_lvl(struct task_struprintk ("%s <%s>\n" , log_lvl, stack_name);if (regs) -show_regs_safe (&stack_info, regs); +show_regs_if_on_stack (&stack_info, regs, partial);/* * Scan the stack, printing any text addresses we find. At the
@@ -164,7 +176,7 @@ void show_trace_log_lvl(struct task_stru/* * Don't print regs->ip again if it was already printed -* by show_regs_safe() below. +* by show_regs_if_on_stack(). */ if (regs && stack == ®s->ip) goto next;
@@ -199,9 +211,9 @@ next:unwind_next_frame (&state);/* if the frame has entry regs, print them */ - regs =unwind_get_entry_regs (&state); + regs =unwind_get_entry_regs (&state, &partial);if (regs) -show_regs_safe (&stack_info, regs); +show_regs_if_on_stack (&stack_info, regs, partial); }if (stack_name)
arch/x86/kernel/stacktrace.c +1 -1
@@ -98,7 +98,7 @@ static int __save_stack_trace_reliable(sfor (unwind_start (&state, task,NULL ,NULL ); !unwind_done (&state);unwind_next_frame (&state)) { - regs =unwind_get_entry_regs (&state); + regs =unwind_get_entry_regs (&state,NULL );if (regs) {/* * Kernel mode registers on the stack indicate an
Greg Kroah-Hartman
maintainerPATCH 6/14 x86/dumpstack: Print registers for first stack frame
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Josh Poimboeuf <[email protected]>
commit 3ffdeb1a02be3086f1411a15c5b9c481fa28e21f upstream.
In the stack dump code, if the frame after the starting pt_regs is also a regs frame, the registers don't get printed. Fix that.
--- arch/x86/kernel/dumpstack.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
arch/x86/kernel/dumpstack.c +2 -1
@@ -115,6 +115,7 @@ void show_trace_log_lvl(struct task_struunwind_start (&state, task, regs, stack); stack = stack ? :get_stack_pointer (task, regs); + regs =unwind_get_entry_regs (&state, &partial);/* * Iterate through the stacks, starting with the current stack pointer.
@@ -132,7 +133,7 @@ void show_trace_log_lvl(struct task_stru* - hardirq stack * - entry stack */ -for (regs =NULL ; stack; stack =PTR_ALIGN (stack_info.next_sp,sizeof (long ))) { +for ( ; stack; stack =PTR_ALIGN (stack_info.next_sp,sizeof (long ))) {const char *stack_name;if (get_stack_info (stack, task, &stack_info, &visit_mask)) {
Greg Kroah-Hartman
maintainerPATCH 8/14 x86/process: Define cpu_tss_rw in same section as declaration
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Nick Desaulniers <[email protected]>
commit 2fd9c41aea47f4ad071accf94b94f94f2c4d31eb upstream.
cpu_tss_rw is declared with DECLARE_PER_CPU_PAGE_ALIGNED but then defined with DEFINE_PER_CPU_SHARED_ALIGNED leading to section mismatch warnings.
Use DEFINE_PER_CPU_PAGE_ALIGNED consistently. This is necessary because it's mapped to the cpu entry area and must be page aligned.
[ tglx: Massaged changelog a bit ]
--- arch/x86/kernel/process.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/x86/kernel/process.c +1 -1
@@ -47,7 +47,7 @@* section. Since TSS's are completely CPU-local, we want them * on exact cacheline boundaries, to eliminate cacheline ping-pong. */ -__visible DEFINE_PER_CPU_SHARED_ALIGNED (struct tss_struct ,cpu_tss_rw ) = { +__visible DEFINE_PER_CPU_PAGE_ALIGNED (struct tss_struct ,cpu_tss_rw ) = { .x86_tss = {/* * .sp0 is only used when entering ring 0 from a lower
Greg Kroah-Hartman
maintainerPATCH 10/14 rtc: m41t80: m41t80_sqw_set_rate should return 0 on success
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Troy Kisky <[email protected]>
commit de6042d2fa8afe22b76e3c68fd6e9584c9415a3b upstream.
Previously it was returning -EINVAL upon success.
--- drivers/rtc/rtc-m41t80.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-)
drivers/rtc/rtc-m41t80.c +1 -4
@@ -510,10 +510,7 @@ static int m41t80_sqw_set_rate(struct cl reg = (reg &0x0f ) | (val <<4 ); ret =i2c_smbus_write_byte_data (client, reg_sqw, reg); -if (ret <0 ) -return ret; - -return -EINVAL ; +return ret; }static int m41t80_sqw_control (struct clk_hw *hw,bool enable)
Greg Kroah-Hartman
maintainerPATCH 12/14 rtc: m41t80: avoid i2c read in m41t80_sqw_recalc_rate
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Troy Kisky <[email protected]>
commit 2cb90ed3de1e279dbaf23df141f54eb9fb1861e6 upstream.
This is a little more efficient, and avoids the warning
WARNING: possible circular locking dependency detected 4.14.0-rc7-00007 #14 Not tainted
------------------------------------------------------
alsactl/330 is trying to acquire lock:
(prepare_lock){+.+.}, at: [<c049300c>] clk_prepare_lock+0x80/0xf4
but task is already holding lock:
(i2c_register_adapter){+.+.}, at: [<c0690ae0>]
i2c_adapter_lock_bus+0x14/0x18
which lock already depends on the new lock.
the existing dependency chain (in reverse order) is:
-> #1 (i2c_register_adapter){+.+.}:
rt_mutex_lock+0x44/0x5c
i2c_adapter_lock_bus+0x14/0x18
i2c_transfer+0xa8/0xbc
i2c_smbus_xfer+0x20c/0x5d8
i2c_smbus_read_byte_data+0x38/0x48
m41t80_sqw_recalc_rate+0x24/0x58--- drivers/rtc/rtc-m41t80.c | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-)
drivers/rtc/rtc-m41t80.c +17 -11
@@ -154,6 +154,7 @@ struct m41t80_data {struct rtc_device *rtc;#ifdef CONFIG_COMMON_CLK struct clk_hw sqw; +unsigned long freq;#endif };
@@ -443,26 +444,28 @@ static SIMPLE_DEV_PM_OPS(m41t80_pm, m41t#ifdef CONFIG_COMMON_CLK #define sqw_to_m41t80_data (_hw) container_of(_hw, struct m41t80_data, sqw) -static unsigned long m41t80_sqw_recalc_rate (struct clk_hw *hw, -unsigned long parent_rate) +static unsigned long m41t80_decode_freq (int setting) +{ +return (setting ==0 ) ?0 : (setting ==1 ) ?M41T80_SQW_MAX_FREQ : +M41T80_SQW_MAX_FREQ >> setting; +} + +static unsigned long m41t80_get_freq (struct m41t80_data *m41t80) { -struct m41t80_data *m41t80 =sqw_to_m41t80_data (hw);struct i2c_client *client = m41t80->client;int reg_sqw = (m41t80->features &M41T80_FEATURE_SQ_ALT ) ?M41T80_REG_WDAY :M41T80_REG_SQW ;int ret =i2c_smbus_read_byte_data (client, reg_sqw); -unsigned long val =M41T80_SQW_MAX_FREQ ;if (ret <0 )return 0 ; +return m41t80_decode_freq (ret >>4 ); +} - ret >>=4 ; -if (ret ==0 ) - val =0 ; -else if (ret >1 ) - val = val / (1 << ret); - -return val; +static unsigned long m41t80_sqw_recalc_rate (struct clk_hw *hw, +unsigned long parent_rate) +{ +return sqw_to_m41t80_data (hw)->freq; } static long m41t80_sqw_round_rate(struct clk_hw *hw, unsigned long rate,
@@ -505,6 +508,8 @@ static int m41t80_sqw_set_rate(struct cl reg = (reg &0x0f ) | (val <<4 ); ret =i2c_smbus_write_byte_data (client, reg_sqw, reg); +if (!ret) + m41t80->freq =m41t80_decode_freq (val);return ret; }
@@ -579,6 +584,7 @@ static struct clk *m41t80_sqw_register_c init.parent_names =NULL ; init.num_parents =0 ; m41t80->sqw.init = &init; + m41t80->freq =m41t80_get_freq (m41t80);/* optional override of the clockname */ of_property_read_string (node,"clock-output-names" , &init.name);
Greg Kroah-Hartman
maintainercover 4.14.12-stable review
This is the start of the stable review cycle for the 4.14.12 release. There are 14 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Sat Jan 6 12:08:52 UTC 2018. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.14.12-rc1.gz
or in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-4.14.y
and the diffstat can be found below.
thanks,
greg k-h
-------------
Pseudo-Shortlog of commits:
Greg Kroah-Hartman <[email protected]>
Linux 4.14.12-rc1
Troy Kisky <[email protected]>
rtc: m41t80: remove unneeded checks from m41t80_sqw_set_rate
Troy Kisky <[email protected]>
rtc: m41t80: avoid i2c read in m41t80_sqw_is_prepared
Troy Kisky <[email protected]>
rtc: m41t80: avoid i2c read in m41t80_sqw_recalc_rate
Troy Kisky <[email protected]>
rtc: m41t80: fix m41t80_sqw_round_rate return value
Troy Kisky <[email protected]>
rtc: m41t80: m41t80_sqw_set_rate should return 0 on success
Steffen Klassert <[email protected]>
Revert "xfrm: Fix stack-out-of-bounds read in xfrm_state_find."
Nick Desaulniers <[email protected]>
x86/process: Define cpu_tss_rw in same section as declaration
Thomas Gleixner <[email protected]>
x86/pti: Switch to kernel CR3 at early in entry_SYSCALL_compat()
Josh Poimboeuf <[email protected]>
x86/dumpstack: Print registers for first stack frame
Josh Poimboeuf <[email protected]>
x86/dumpstack: Fix partial register dumps
Thomas Gleixner <[email protected]>
x86/pti: Make sure the user/kernel PTEs match
Tom Lendacky <[email protected]>
x86/cpu, x86/pti: Do not enable PTI on AMD processors
Eric Biggers <[email protected]>
capabilities: fix buffer overread on very short xattr
Kees Cook <[email protected]>
exec: Weaken dumpability for secureexec
-------------
Diffstat:
Makefile | 4 +- arch/x86/entry/entry_64_compat.S | 13 +++---- arch/x86/include/asm/unwind.h | 17 ++++++-- arch/x86/kernel/cpu/common.c | 4 +- arch/x86/kernel/dumpstack.c | 31 ++++++++++----- arch/x86/kernel/process.c | 2 +- arch/x86/kernel/stacktrace.c | 2 +- arch/x86/mm/pti.c | 3 +- drivers/rtc/rtc-m41t80.c | 84 ++++++++++++++++++---------------------- fs/exec.c | 9 ++++- net/xfrm/xfrm_policy.c | 29 ++++++++------ security/commoncap.c | 21 +++++----- 12 files changed, 120 insertions(+), 99 deletions(-)
Greg Kroah-Hartman
maintainerPATCH 13/14 rtc: m41t80: avoid i2c read in m41t80_sqw_is_prepared
4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Troy Kisky <[email protected]>
commit 13bb1d78f2e372ec0d9b30489ac63768240140fc upstream.
This is a little more efficient and avoids the warning
WARNING: possible circular locking dependency detected 4.14.0-rc7-00010 #16 Not tainted
------------------------------------------------------
kworker/2:1/70 is trying to acquire lock:
(prepare_lock){+.+.}, at: [<c049300c>] clk_prepare_lock+0x80/0xf4
but task is already holding lock:
(i2c_register_adapter){+.+.}, at: [<c0690b04>]
i2c_adapter_lock_bus+0x14/0x18
which lock already depends on the new lock.
the existing dependency chain (in reverse order) is:
-> #1 (i2c_register_adapter){+.+.}:
rt_mutex_lock+0x44/0x5c
i2c_adapter_lock_bus+0x14/0x18
i2c_transfer+0xa8/0xbc
i2c_smbus_xfer+0x20c/0x5d8
i2c_smbus_read_byte_data+0x38/0x48
m41t80_sqw_is_prepared+0x18/0x28--- drivers/rtc/rtc-m41t80.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-)
drivers/rtc/rtc-m41t80.c +6 -9
@@ -155,6 +155,7 @@ struct m41t80_data {#ifdef CONFIG_COMMON_CLK struct clk_hw sqw;unsigned long freq; +unsigned int sqwe;#endif };
@@ -527,7 +528,10 @@ static int m41t80_sqw_control(struct clkelse ret &= ~M41T80_ALMON_SQWE ; -return i2c_smbus_write_byte_data (client,M41T80_REG_ALARM_MON , ret); + ret =i2c_smbus_write_byte_data (client,M41T80_REG_ALARM_MON , ret); +if (!ret) + m41t80->sqwe = enable; +return ret; }static int m41t80_sqw_prepare (struct clk_hw *hw)
@@ -542,14 +546,7 @@ static void m41t80_sqw_unprepare(structstatic int m41t80_sqw_is_prepared (struct clk_hw *hw) { -struct m41t80_data *m41t80 =sqw_to_m41t80_data (hw); -struct i2c_client *client = m41t80->client; -int ret =i2c_smbus_read_byte_data (client,M41T80_REG_ALARM_MON ); - -if (ret <0 ) -return ret; - -return !!(ret &M41T80_ALMON_SQWE ); +return sqw_to_m41t80_data (hw)->sqwe; }static const struct clk_ops m41t80_sqw_ops = {
Greg Kroah-Hartman
maintainerPATCH 2/14 capabilities: fix buffer overread on very short xattr
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Eric Biggers <[email protected]>
commit dc32b5c3e6e2ef29cef76d9ce1b92d394446150e upstream.
If userspace attempted to set a "security.capability" xattr shorter than 4 bytes (e.g. 'setfattr -n security.capability -v x file'), then cap_convert_nscap() read past the end of the buffer containing the xattr value because it accessed the ->magic_etc field without verifying that the xattr value is long enough to contain that field.
Fix it by validating the xattr value size first.
This bug was found using syzkaller with KASAN. The KASAN report was as follows (cleaned up slightly):
BUG: KASAN: slab-out-of-bounds in cap_convert_nscap+0x514/0x630 security/commoncap.c:498
Read of size 4 at addr ffff88002d8741c0 by task syz-executor1/2852
CPU: 0 PID: 2852 Comm: syz-executor1 Not tainted 4.15.0-rc6-00200-gcc0aac99d977 #253
Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.11.0-20171110_100015-anatol 04/01/2014
Call Trace:
__dump_stack lib/dump_stack.c:17 [inline]
dump_stack+0xe3/0x195 lib/dump_stack.c:53
print_address_description+0x73/0x260 mm/kasan/report.c:252
kasan_report_error mm/kasan/report.c:351 [inline]
kasan_report+0x235/0x350 mm/kasan/report.c:409
cap_convert_nscap+0x514/0x630 security/commoncap.c:498
setxattr+0x2bd/0x350 fs/xattr.c:446
path_setxattr+0x168/0x1b0 fs/xattr.c:472
SYSC_setxattr fs/xattr.c:487 [inline]
SyS_setxattr+0x36/0x50 fs/xattr.c:483
entry_SYSCALL_64_fastpath+0x18/0x85--- security/commoncap.c | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-)
security/commoncap.c +9 -12
@@ -348,21 +348,18 @@ static __u32 sansflags(__u32 m)return m & ~VFS_CAP_FLAGS_EFFECTIVE ; } -static bool is_v2header (size_t size,__le32 magic) +static bool is_v2header (size_t size,const struct vfs_cap_data *cap) { -__u32 m =le32_to_cpu (magic);if (size !=XATTR_CAPS_SZ_2 )return false; -return sansflags (m) ==VFS_CAP_REVISION_2 ; +return sansflags (le32_to_cpu (cap->magic_etc)) ==VFS_CAP_REVISION_2 ; } -static bool is_v3header (size_t size,__le32 magic) +static bool is_v3header (size_t size,const struct vfs_cap_data *cap) { -__u32 m =le32_to_cpu (magic); -if (size !=XATTR_CAPS_SZ_3 )return false; -return sansflags (m) ==VFS_CAP_REVISION_3 ; +return sansflags (le32_to_cpu (cap->magic_etc)) ==VFS_CAP_REVISION_3 ; }/*
@@ -405,7 +402,7 @@ int cap_inode_getsecurity(struct inode * fs_ns = inode->i_sb->s_user_ns; cap = (struct vfs_cap_data *) tmpbuf; -if (is_v2header ((size_t ) ret, cap->magic_etc)) { +if (is_v2header ((size_t ) ret, cap)) {/* If this is sizeof(vfs_cap_data) then we're ok with the * on-disk value, so return that. */ if (alloc)
@@ -413,7 +410,7 @@ int cap_inode_getsecurity(struct inode *else kfree (tmpbuf);return ret; - }else if (!is_v3header ((size_t ) ret, cap->magic_etc)) { + }else if (!is_v3header ((size_t ) ret, cap)) {kfree (tmpbuf);return -EINVAL ; }
@@ -470,9 +467,9 @@ static kuid_t rootid_from_xattr(const voreturn make_kuid (task_ns, rootid); } -static bool validheader (size_t size,__le32 magic) +static bool validheader (size_t size,const struct vfs_cap_data *cap) { -return is_v2header (size, magic) ||is_v3header (size, magic); +return is_v2header (size, cap) ||is_v3header (size, cap); }/*
@@ -495,7 +492,7 @@ int cap_convert_nscap(struct dentry *denif (!*ivalue)return -EINVAL ; -if (!validheader (size, cap->magic_etc)) +if (!validheader (size, cap))return -EINVAL ;if (!capable_wrt_inode_uidgid (inode,CAP_SETFCAP ))return -EPERM ;
Greg Kroah-Hartman
maintainerPATCH 3/14 x86/cpu, x86/pti: Do not enable PTI on AMD processors
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Tom Lendacky <[email protected]>
commit 694d99d40972f12e59a3696effee8a376b79d7c8 upstream.
AMD processors are not subject to the types of attacks that the kernel page table isolation feature protects against. The AMD microarchitecture does not allow memory references, including speculative references, that access higher privileged data when running in a lesser privileged mode when that access would result in a page fault.
Disable page table isolation by default on AMD processors by not setting the X86_BUG_CPU_INSECURE feature, which controls whether X86_FEATURE_PTI is set.
--- arch/x86/kernel/cpu/common.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
arch/x86/kernel/cpu/common.c +2 -2
@@ -899,8 +899,8 @@ static void __init early_identify_cpu(stsetup_force_cpu_cap (X86_FEATURE_ALWAYS ); -/* Assume for now that ALL x86 CPUs are insecure */ -setup_force_cpu_bug (X86_BUG_CPU_INSECURE ); +if (c->x86_vendor !=X86_VENDOR_AMD ) +setup_force_cpu_bug (X86_BUG_CPU_INSECURE );fpu__init_system (c);
Greg Kroah-Hartman
maintainerPATCH 7/14 x86/pti: Switch to kernel CR3 at early in entry_SYSCALL_compat()
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Thomas Gleixner <[email protected]>
commit d7732ba55c4b6a2da339bb12589c515830cfac2c upstream.
The preparation for PTI which added CR3 switching to the entry code misplaced the CR3 switch in entry_SYSCALL_compat().
With PTI enabled the entry code tries to access a per cpu variable after switching to kernel GS. This fails because that variable is not mapped to user space. This results in a double fault and in the worst case a kernel crash.
Move the switch ahead of the access and clobber RSP which has been saved already.
--- arch/x86/entry/entry_64_compat.S | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-)
arch/x86/entry/entry_64_compat.S +6 -7
@@ -190,8 +190,13 @@ ENTRY(entry_SYSCALL_compat) /* Interrupts are off on entry. */ swapgs - /* Stash user ESP and switch to the kernel stack. */ + /* Stash user ESP */ movl %esp, %r8d + + /* Use %rsp as scratch reg. User ESP is stashed in r8 */ + SWITCH_TO_KERNEL_CR3 scratch_reg=%rsp + + /* Switch to the kernel stack */ movq PER_CPU_VAR(cpu_current_top_of_stack), %rsp /* Construct struct pt_regs on stack */
@@ -220,12 +225,6 @@ GLOBAL(entry_SYSCALL_compat_after_hwfram pushq $0 /* pt_regs->r15 = 0 */ /* - * We just saved %rdi so it is safe to clobber. It is not - * preserved during the C calls inside TRACE_IRQS_OFF anyway. - */ - SWITCH_TO_KERNEL_CR3 scratch_reg=%rdi - - /* * User mode is traced as though IRQs are on, and SYSENTER * turned them off. */
Greg Kroah-Hartman
maintainerPATCH 9/14 Revert "xfrm: Fix stack-out-of-bounds read in xfrm_state_find."
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Steffen Klassert <[email protected]>
commit 94802151894d482e82c324edf2c658f8e6b96508 upstream.
This reverts commit c9f3f813d462c72dbe412cee6a5cbacf13c4ad5e.
This commit breaks transport mode when the policy template has widlcard addresses configured, so revert it.
--- net/xfrm/xfrm_policy.c | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-)
net/xfrm/xfrm_policy.c +18 -11
@@ -1362,29 +1362,36 @@ xfrm_tmpl_resolve_one(struct xfrm_policystruct net *net =xp_net (policy);int nx;int i, error; +xfrm_address_t *daddr =xfrm_flowi_daddr (fl, family); +xfrm_address_t *saddr =xfrm_flowi_saddr (fl, family);xfrm_address_t tmp;for (nx =0 , i =0 ; i < policy->xfrm_nr; i++) {struct xfrm_state *x; -xfrm_address_t *local; -xfrm_address_t *remote; +xfrm_address_t *remote = daddr; +xfrm_address_t *local = saddr;struct xfrm_tmpl *tmpl = &policy->xfrm_vec[i]; - remote = &tmpl->id.daddr; - local = &tmpl->saddr; -if (xfrm_addr_any (local, tmpl->encap_family)) { - error =xfrm_get_saddr (net, fl->flowi_oif, - &tmp, remote, - tmpl->encap_family,0 ); -if (error) - goto fail; - local = &tmp; +if (tmpl->mode ==XFRM_MODE_TUNNEL || + tmpl->mode ==XFRM_MODE_BEET ) { + remote = &tmpl->id.daddr; + local = &tmpl->saddr; +if (xfrm_addr_any (local, tmpl->encap_family)) { + error =xfrm_get_saddr (net, fl->flowi_oif, + &tmp, remote, + tmpl->encap_family,0 ); +if (error) + goto fail; + local = &tmp; + } } x =xfrm_state_find (remote, local, fl, tmpl, policy, &error, family);if (x && x->km.state ==XFRM_STATE_VALID ) { xfrm[nx++] = x; + daddr = remote; + saddr = local;continue ; }if (x) {
Greg Kroah-Hartman
maintainerPATCH 11/14 rtc: m41t80: fix m41t80_sqw_round_rate return value
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Troy Kisky <[email protected]>
commit c8384bb04261b9d32fe7402a6068ddaf38913b23 upstream.
Previously it was returning the best of
32768, 8192, 1024, 64, 2, 0
Now, best of
32768, 8192, 4096, 2048, 1024, 512, 256, 128,
64, 32, 16, 8, 4, 2, 1, 0
--- drivers/rtc/rtc-m41t80.c | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-)
drivers/rtc/rtc-m41t80.c +7 -12
@@ -468,18 +468,13 @@ static unsigned long m41t80_sqw_recalc_rstatic long m41t80_sqw_round_rate (struct clk_hw *hw,unsigned long rate,unsigned long *prate) { -int i, freq =M41T80_SQW_MAX_FREQ ; - -if (freq <= rate) -return freq; - -for (i =2 ; i <=ilog2 (M41T80_SQW_MAX_FREQ ); i++) { - freq /=1 << i; -if (freq <= rate) -return freq; - } - -return 0 ; +if (rate >=M41T80_SQW_MAX_FREQ ) +return M41T80_SQW_MAX_FREQ ; +if (rate >=M41T80_SQW_MAX_FREQ /4 ) +return M41T80_SQW_MAX_FREQ /4 ; +if (!rate) +return 0 ; +return 1 <<ilog2 (rate); } static int m41t80_sqw_set_rate(struct clk_hw *hw, unsigned long rate,
Greg Kroah-Hartman
maintainerPATCH 14/14 rtc: m41t80: remove unneeded checks from m41t80_sqw_set_rate
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Troy Kisky <[email protected]>
commit 05a03bf260e0480bfc0db91b1fdbc2115e3f193b upstream.
m41t80_sqw_set_rate will be called with the result from m41t80_sqw_round_rate, so might as well make m41t80_sqw_set_rate(n) same as m41t80_sqw_set_rate(m41t80_sqw_round_rate(n))
As Russell King wrote[1],
"clk_round_rate() is supposed to tell you what you end up with if you ask clk_set_rate() to set the exact same value you passed in - but clk_round_rate() won't modify the hardware."
[1]
http://lists.infradead.org/pipermail/linux-arm-kernel/2012-January/080175.html
--- drivers/rtc/rtc-m41t80.c | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-)
drivers/rtc/rtc-m41t80.c +6 -11
@@ -490,17 +490,12 @@ static int m41t80_sqw_set_rate(struct cl M41T80_REG_WDAY :M41T80_REG_SQW ;int reg, ret, val =0 ; -if (rate) { -if (!is_power_of_2 (rate)) -return -EINVAL ; - val =ilog2 (rate); -if (val ==ilog2 (M41T80_SQW_MAX_FREQ )) - val =1 ; -else if (val < (ilog2 (M41T80_SQW_MAX_FREQ ) -1 )) - val =ilog2 (M41T80_SQW_MAX_FREQ ) - val; -else -return -EINVAL ; - } +if (rate >=M41T80_SQW_MAX_FREQ ) + val =1 ; +else if (rate >=M41T80_SQW_MAX_FREQ /4 ) + val =2 ; +else if (rate) + val =15 -ilog2 (rate); reg =i2c_smbus_read_byte_data (client, reg_sqw);if (reg <0 )
stable-rc/linux-4.14.y boot: 118 boots: 4 failed, 113 passed with 1 offline (v4.14.11-15-g732141e47ee6)
stable-rc/linux-4.14.y boot: 118 boots: 4 failed, 113 passed with 1 offline (v4.14.11-15-g732141e47ee6)
Full Boot Summary: https://kernelci.org/boot/all/job/stable-rc/branch/linux-4.14.y/kernel/v4.14.11-15-g732141e47ee6/
Full Build Summary: https://kernelci.org/build/stable-rc/branch/linux-4.14.y/kernel/v4.14.11-15-g732141e47ee6/
Tree: stable-rc
Branch: linux-4.14.y
Git Describe: v4.14.11-15-g732141e47ee6
Git Commit: 732141e47ee614d70aeb8ad828a977ad19447e87
Git URL: http://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
Tested: 68 unique boards, 23 SoC families, 16 builds out of 185
Boot Regressions Detected:
arm:
multi_v7_defconfig:
armada-xp-linksys-mamba:
lab-free-electrons: new failure (last pass: v4.14.11)
tegra124-nyan-big:
lab-collabora: failing since 1 day (last pass: v4.14.10-147-g61f3176f64e3 - first fail: v4.14.11)
omap2plus_defconfig:
am335x-boneblack:
lab-collabora: new failure (last pass: v4.14.11)
tegra_defconfig:
tegra124-nyan-big:
lab-collabora: failing since 1 day (last pass: v4.14.10-147-g61f3176f64e3 - first fail: v4.14.11)Boot Failures Detected:
arm:
multi_v7_defconfig
armada-xp-linksys-mamba: 1 failed lab
tegra124-nyan-big: 1 failed lab
omap2plus_defconfig
am335x-boneblack: 1 failed lab
tegra_defconfig
tegra124-nyan-big: 1 failed lab
Offline Platforms:
arm:
davinci_all_defconfig:
dm365evm,legacy: 1 offline lab
---
For more info write to <[email protected]>
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.14.12 release. There are 14 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Sat Jan 6 12:08:52 UTC 2018. Anything received after that time might be too late.
Build results:
total: 145 pass: 145 fail: 0 Qemu test results: total: 126 pass: 126 fail: 0
Details are available at http://kerneltests.org/builders.
Guenter
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.14.12 release. There are 14 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Sat Jan 6 12:08:52 UTC 2018. Anything received after that time might be too late.
Results from Linaro’s test farm.
No regressions on arm64, arm and x86_64.
Summary
------------------------------------------------------------------------
kernel: 4.14.12-rc1
git repo: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
git branch: linux-4.14.y
git commit: 732141e47ee614d70aeb8ad828a977ad19447e87
git describe: v4.14.11-15-g732141e47ee6
Test details: https://qa-reports.linaro.org/lkft/linux-stable-rc-4.14-oe/build/v4.14.11-15-g732141e47ee6
No regressions (compared to build v4.14.11)
Boards, architectures and test suites:
-------------------------------------
hi6220-hikey - arm64
* boot - pass: 20,
* kselftest - pass: 46, skip: 16
* libhugetlbfs - pass: 90, skip: 1
* ltp-cap_bounds-tests - pass: 2,
* ltp-containers-tests - pass: 64,
* ltp-fcntl-locktests-tests - pass: 2,
* ltp-filecaps-tests - pass: 2,
* ltp-fs-tests - pass: 60,
* ltp-fs_bind-tests - pass: 2,
* ltp-fs_perms_simple-tests - pass: 19,
* ltp-fsx-tests - pass: 2,
* ltp-hugetlb-tests - pass: 21, skip: 1
* ltp-io-tests - pass: 3,
* ltp-ipc-tests - pass: 9,
* ltp-math-tests - pass: 11,
* ltp-nptl-tests - pass: 2,
* ltp-pty-tests - pass: 4,
* ltp-sched-tests - pass: 14,
* ltp-securebits-tests - pass: 4,
* ltp-syscalls-tests - pass: 983, skip: 121
* ltp-timers-tests - pass: 12,
juno-r2 - arm64
* boot - pass: 20,
* kselftest - pass: 45, skip: 17
* libhugetlbfs - pass: 90, skip: 1
* ltp-cap_bounds-tests - pass: 2,
* ltp-containers-tests - pass: 64,
* ltp-fcntl-locktests-tests - pass: 2,
* ltp-filecaps-tests - pass: 2,
* ltp-fs-tests - pass: 60,
* ltp-fs_bind-tests - pass: 2,
* ltp-fs_perms_simple-tests - pass: 19,
* ltp-fsx-tests - pass: 2,
* ltp-hugetlb-tests - pass: 22,
* ltp-io-tests - pass: 3,
* ltp-ipc-tests - pass: 9,
* ltp-math-tests - pass: 11,
* ltp-nptl-tests - pass: 2,
* ltp-pty-tests - pass: 4,
* ltp-sched-tests - pass: 14,
* ltp-securebits-tests - pass: 4,
* ltp-syscalls-tests - pass: 987, skip: 121
* ltp-timers-tests - pass: 12,
x15 - arm
* boot - pass: 19,
* kselftest - pass: 41, skip: 20
* libhugetlbfs - pass: 87, skip: 1
* ltp-cap_bounds-tests - pass: 2,
* ltp-containers-tests - pass: 64,
* ltp-fcntl-locktests-tests - pass: 2,
* ltp-filecaps-tests - pass: 2,
* ltp-fs-tests - pass: 60,
* ltp-fs_bind-tests - pass: 2,
* ltp-fs_perms_simple-tests - pass: 19,
* ltp-fsx-tests - pass: 2,
* ltp-hugetlb-tests - pass: 20, skip: 2
* ltp-io-tests - pass: 3,
* ltp-ipc-tests - pass: 9,
* ltp-math-tests - pass: 11,
* ltp-nptl-tests - pass: 2,
* ltp-pty-tests - pass: 4,
* ltp-securebits-tests - pass: 4,
* ltp-syscalls-tests - pass: 1037, skip: 66
* ltp-timers-tests - pass: 12,
x86_64
* boot - pass: 20,
* kselftest - fail: 1, pass: 57, skip: 17
* libhugetlbfs - pass: 89, skip: 1
* ltp-cap_bounds-tests - pass: 2,
* ltp-containers-tests - pass: 64,
* ltp-fcntl-locktests-tests - pass: 2,
* ltp-filecaps-tests - pass: 2,
* ltp-fs-tests - pass: 61, skip: 1
* ltp-fs_bind-tests - pass: 2,
* ltp-fs_perms_simple-tests - pass: 19,
* ltp-fsx-tests - pass: 2,
* ltp-hugetlb-tests - pass: 22,
* ltp-io-tests - pass: 3,
* ltp-ipc-tests - pass: 9,
* ltp-math-tests - pass: 11,
* ltp-nptl-tests - pass: 2,
* ltp-pty-tests - pass: 4,
* ltp-sched-tests - pass: 9, skip: 1
* ltp-securebits-tests - pass: 4,
* ltp-syscalls-tests - pass: 1016, skip: 116
* ltp-timers-tests - pass: 12,
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.14.12 release. There are 14 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Sat Jan 6 12:08:52 UTC 2018. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 9 lines
kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.14.12-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-4.14.y
and the diffstat can be found below.thanks,
greg k-h
Compiled and booted on my test system. No dmesg regressions.
thanks,
-- Shuah
Quoted 5 lines · kernelci.org bot
stable-rc/linux-4.14.y boot: 118 boots: 4 failed, 113 passed with 1 offline (v4.14.11-15-g732141e47ee6)
Full Boot Summary: https://kernelci.org/boot/all/job/stable-rc/branch/linux-4.14.y/kernel/v4.14.11-15-g732141e47ee6/
Full Build Summary: https://kernelci.org/build/stable-rc/branch/linux-4.14.y/kernel/v4.14.11-15-g732141e47ee6/
Quoted 8 lines
Tree: stable-rc
Branch: linux-4.14.y
Git Describe: v4.14.11-15-g732141e47ee6
Git Commit:732141e47ee614d70aeb8ad828a977ad19447e87
Git URL: http://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
Tested: 68 unique boards, 23 SoC families, 16 builds out of 185Boot Regressions Detected:
TL;DR; All is well.
Same issues as reported for stable-rc/linux-4.4.y, but...
Quoted 11 lines
arm:
multi_v7_defconfig: armada-xp-linksys-mamba: lab-free-electrons: new failure (last pass: v4.14.11) tegra124-nyan-big: lab-collabora: failing since 1 day (last pass: v4.14.10-147-g61f3176f64e3 - first fail: v4.14.11) omap2plus_defconfig: am335x-boneblack: lab-collabora: new failure (last pass: v4.14.11)
... this one is unique to 4.14, but is still a lab issue: bootloader fails to DHCP.
Kevin
Greg Kroah-Hartman
maintainerQuoted 14 lines · Kevin Hilman
Quoted 12 lines · kernelci.org bot
stable-rc/linux-4.14.y boot: 118 boots: 4 failed, 113 passed with 1 offline (v4.14.11-15-g732141e47ee6)
Full Boot Summary: https://kernelci.org/boot/all/job/stable-rc/branch/linux-4.14.y/kernel/v4.14.11-15-g732141e47ee6/
Full Build Summary: https://kernelci.org/build/stable-rc/branch/linux-4.14.y/kernel/v4.14.11-15-g732141e47ee6/Tree: stable-rc
Branch: linux-4.14.y
Git Describe: v4.14.11-15-g732141e47ee6
Git Commit:732141e47ee614d70aeb8ad828a977ad19447e87
Git URL: http://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
Tested: 68 unique boards, 23 SoC families, 16 builds out of 185
Quoted 3 lines
Quoted 1 line
Boot Regressions Detected:
TL;DR; All is well.
Thanks for the summary of all of these, and for your continued testing.
greg k-h
Greg Kroah-Hartman
maintainerQuoted 6 lines · Dan Rue
Quoted 5 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.14.12 release. There are 14 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Quoted 6 lines
Quoted 3 lines
Responses should be made by Sat Jan 6 12:08:52 UTC 2018. Anything received after that time might be too late.
Results from Linaro’s test farm.
No regressions on arm64, arm andx86_64.
Thanks for testing and letting me know.
greg k-h
Greg Kroah-Hartman
maintainerQuoted 10 lines · Guenter Roeck
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.14.12 release. There are 14 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Sat Jan 6 12:08:52 UTC 2018. Anything received after that time might be too late.
Quoted 6 lines
Build results:
total: 145 pass: 145 fail: 0 Qemu test results: total: 126 pass: 126 fail: 0Details are available at http://kerneltests.org/builders.
Thanks for testing all three of these and letting me know.
greg k-h
+Sjoerd
Quoted 28 lines · Kevin Hilman
Quoted 5 lines · kernelci.org bot
stable-rc/linux-4.14.y boot: 118 boots: 4 failed, 113 passed with 1 offline (v4.14.11-15-g732141e47ee6)
Full Boot Summary: https://kernelci.org/boot/all/job/stable-rc/branch/linux-4.14.y/kernel/v4.14.11-15-g732141e47ee6/
Full Build Summary: https://kernelci.org/build/stable-rc/branch/linux-4.14.y/kernel/v4.14.11-15-g732141e47ee6/Quoted 8 lines
Tree: stable-rc
Branch: linux-4.14.y
Git Describe: v4.14.11-15-g732141e47ee6
Git Commit:732141e47ee614d70aeb8ad828a977ad19447e87
Git URL: http://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
Tested: 68 unique boards, 23 SoC families, 16 builds out of 185Boot Regressions Detected:
TL;DR; All is well.
Same issues as reported for stable-rc/linux-4.4.y, but...
Quoted 8 lines
arm:
multi_v7_defconfig: armada-xp-linksys-mamba: lab-free-electrons: new failure (last pass: v4.14.11) tegra124-nyan-big: lab-collabora: failing since 1 day (last pass: v4.14.10-147-g61f3176f64e3 - first fail: v4.14.11)
Quoted 6 lines
Quoted 3 lines
omap2plus_defconfig:
am335x-boneblack:
lab-collabora: new failure (last pass: v4.14.11)... this one is unique to 4.14, but is still a lab issue: bootloader fails to DHCP.
Turns out this is a known hardware issue with the ethernet phy on this type of board. It's possible to work around it (retry...), we'll take a look.
Guillaume