3.18.80-stable review
Greg Kroah-Hartman
maintainercover 3.18.80-stable review
This is the start of the stable review cycle for the 3.18.80 release. There are 27 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 Wed Nov 8 11:27:27 UTC 2017. 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/v3.x/stable-review/patch-3.18.80-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-3.18.y
and the diffstat can be found below.
thanks,
greg k-h
-------------
Pseudo-Shortlog of commits:
Greg Kroah-Hartman <[email protected]>
Linux 3.18.80-rc1
Larry Finger <[email protected]>
staging: r8712u: Fix Sparse warning in rtl871x_xmit.c
Juergen Gross <[email protected]>
xen: don't print error message in case of missing Xenstore entry
Sudip Mukherjee <[email protected]>
bt8xx: fix memory leak
Stefan Haberland <[email protected]>
s390/dasd: check for device error pointer within state change interrupts
Alexander Boyko <[email protected]>
staging: lustre: ptlrpc: skip lock if export failed
frank zago <[email protected]>
staging: lustre: hsm: stack overrun in hai_dump_data_field
Javier Martinez Canillas <[email protected]>
platform/x86: intel_mid_thermal: Fix module autoload
Jan Beulich <[email protected]>
xen/manage: correct return value check on xenbus_scanf()
Oleh Kravchenko <[email protected]>
cx231xx: Fix I2C on Internal Master 3 Bus
Chris Brandt <[email protected]>
i2c: riic: correctly finish transfers
Jan Kara <[email protected]>
ext4: do not use stripe_width if it is not set
Jan Kara <[email protected]>
ext4: fix stripe-unaligned allocations
Larry Finger <[email protected]>
staging: rtl8712u: Fix endian settings for structs describing network packets
Arnd Bergmann <[email protected]>
mmc: s3cmci: include linux/interrupt.h for tasklet_struct
Borislav Petkov <[email protected]>
x86/microcode/intel: Disable late loading on model 79
Dan Carpenter <[email protected]>
drm/msm: fix an integer overflow test
Kasin Li <[email protected]>
drm/msm: Fix potential buffer overflow issue
Ashish Samant <[email protected]>
ocfs2: fstrim: Fix start offset of first cluster group during fstrim
Arnd Bergmann <[email protected]>
ARM: 8715/1: add a private asm/unaligned.h
Mark Rutland <[email protected]>
arm64: ensure __dump_instr() checks addr_limit
Ricard Wanderlof <[email protected]>
ASoC: adau17x1: Workaround for noise bug in ADC
Eric Biggers <[email protected]>
KEYS: fix out-of-bounds read during ASN.1 parsing
Eric Biggers <[email protected]>
KEYS: return full count in keyring_read() if buffer is too small
Ronnie Sahlberg <[email protected]>
cifs: check MaxPathNameComponentLength != 0 before using it
Takashi Iwai <[email protected]>
ALSA: seq: Fix nested rwsem annotation for lockdep splat
Takashi Iwai <[email protected]>
ALSA: timer: Add missing mutex lock for compat ioctls
Ming Lei <[email protected]>
blk-mq: fix race between timeout and freeing request
-------------
Diffstat:
Makefile | 4 +- arch/arm/include/asm/Kbuild | 1 - arch/arm/include/asm/unaligned.h | 27 +++++++ arch/arm64/kernel/traps.c | 2 +- arch/x86/kernel/cpu/microcode/intel.c | 18 +++++ block/blk-flush.c | 15 +++- block/blk-mq-tag.c | 2 +- block/blk-mq-tag.h | 12 ++++ block/blk-mq.c | 16 +---- block/blk.h | 6 ++ drivers/gpu/drm/msm/msm_gem_submit.c | 7 +- drivers/i2c/busses/i2c-riic.c | 30 ++++++-- drivers/media/pci/bt8xx/dvb-bt8xx.c | 1 + drivers/media/usb/cx231xx/cx231xx-core.c | 7 +- drivers/mmc/host/s3cmci.c | 1 + drivers/platform/x86/intel_mid_thermal.c | 1 + drivers/s390/block/dasd.c | 7 +- .../lustre/lustre/include/lustre/lustre_user.h | 18 +++-- drivers/staging/lustre/lustre/ldlm/ldlm_lock.c | 7 ++ drivers/staging/lustre/lustre/ptlrpc/service.c | 21 +++--- drivers/staging/rtl8712/ieee80211.h | 84 +++++++++++----------- drivers/staging/rtl8712/rtl871x_xmit.c | 7 +- drivers/xen/manage.c | 12 +++- fs/cifs/dir.c | 5 +- fs/ext4/mballoc.c | 6 +- fs/ext4/super.c | 4 +- fs/ocfs2/alloc.c | 24 +++++-- lib/asn1_decoder.c | 3 + security/keys/keyring.c | 39 +++++----- sound/core/seq/seq_clientmgr.c | 2 +- sound/core/timer_compat.c | 17 ++++- sound/soc/codecs/adau17x1.c | 24 ++++++- sound/soc/codecs/adau17x1.h | 2 + 33 files changed, 293 insertions(+), 139 deletions(-)
Greg Kroah-Hartman
maintainerPATCH 1/27 blk-mq: fix race between timeout and freeing request
3.18-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ming Lei <[email protected]>
commit 0048b4837affd153897ed1222283492070027aa9 upstream.
Inside timeout handler, blk_mq_tag_to_rq() is called to retrieve the request from one tag. This way is obviously wrong because the request can be freed any time and some fiedds of the request can't be trusted, then kernel oops might be triggered[1].
Currently wrt. blk_mq_tag_to_rq(), the only special case is that the flush request can share same tag with the request cloned from, and the two requests can't be active at the same time, so this patch fixes the above issue by updating tags->rqs[tag] with the active request(either flush rq or the request cloned from) of the tag.
Also blk_mq_tag_to_rq() gets much simplified with this patch.
Given blk_mq_tag_to_rq() is mainly for drivers and the caller must make sure the request can't be freed, so in bt_for_each() this helper is replaced with tags->rqs[tag].
[1] kernel oops log
[ 439.696220] BUG: unable to handle kernel NULL pointer dereference at 0000000000000158^M [ 439.697162] IP: [<ffffffff812d89ba>] blk_mq_tag_to_rq+0x21/0x6e^M [ 439.700653] PGD 7ef765067 PUD 7ef764067 PMD 0 ^M [ 439.700653] Oops: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC ^M [ 439.700653] Dumping ftrace buffer:^M [ 439.700653] (ftrace buffer empty)^M [ 439.700653] Modules linked in: nbd ipv6 kvm_intel kvm serio_raw^M [ 439.700653] CPU: 6 PID: 2779 Comm: stress-ng-sigfd Not tainted 4.2.0-rc5-next-20150805+ #265^M [ 439.730500] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Bochs 01/01/2011^M [ 439.730500] task: ffff880605308000 ti: ffff88060530c000 task.ti: ffff88060530c000^M [ 439.730500] RIP: 0010:[<ffffffff812d89ba>] [<ffffffff812d89ba>] blk_mq_tag_to_rq+0x21/0x6e^M [ 439.730500] RSP: 0018:ffff880819203da0 EFLAGS: 00010283^M [ 439.730500] RAX: ffff880811b0e000 RBX: ffff8800bb465f00 RCX: 0000000000000002^M [ 439.730500] RDX: 0000000000000000 RSI: 0000000000000202 RDI: 0000000000000000^M [ 439.730500] RBP: ffff880819203db0 R08: 0000000000000002 R09: 0000000000000000^M [ 439.730500] R10: 0000000000000000 R11: 0000000000000000 R12: 0000000000000202^M [ 439.730500] R13: ffff880814104800 R14: 0000000000000002 R15: ffff880811a2ea00^M [ 439.730500] FS: 00007f165b3f5740(0000) GS:ffff880819200000(0000) knlGS:0000000000000000^M [ 439.730500] CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b^M [ 439.730500] CR2: 0000000000000158 CR3: 00000007ef766000 CR4: 00000000000006e0^M [ 439.730500] Stack:^M [ 439.730500] 0000000000000008 ffff8808114eed90 ffff880819203e00 ffffffff812dc104^M [ 439.755663] ffff880819203e40 ffffffff812d9f5e 0000020000000000 ffff8808114eed80^M [ 439.755663] Call Trace:^M [ 439.755663] <IRQ> ^M [ 439.755663] [<ffffffff812dc104>] bt_for_each+0x6e/0xc8^M [ 439.755663] [<ffffffff812d9f5e>] ? blk_mq_rq_timed_out+0x6a/0x6a^M [ 439.755663] [<ffffffff812d9f5e>] ? blk_mq_rq_timed_out+0x6a/0x6a^M [ 439.755663] [<ffffffff812dc1b3>] blk_mq_tag_busy_iter+0x55/0x5e^M [ 439.755663] [<ffffffff812d88b4>] ? blk_mq_bio_to_request+0x38/0x38^M [ 439.755663] [<ffffffff812d8911>] blk_mq_rq_timer+0x5d/0xd4^M [ 439.755663] [<ffffffff810a3e10>] call_timer_fn+0xf7/0x284^M [ 439.755663] [<ffffffff810a3d1e>] ? call_timer_fn+0x5/0x284^M [ 439.755663] [<ffffffff812d88b4>] ? blk_mq_bio_to_request+0x38/0x38^M [ 439.755663] [<ffffffff810a46d6>] run_timer_softirq+0x1ce/0x1f8^M [ 439.755663] [<ffffffff8104c367>] __do_softirq+0x181/0x3a4^M [ 439.755663] [<ffffffff8104c76e>] irq_exit+0x40/0x94^M [ 439.755663] [<ffffffff81031482>] smp_apic_timer_interrupt+0x33/0x3e^M [ 439.755663] [<ffffffff815559a4>] apic_timer_interrupt+0x84/0x90^M [ 439.755663] <EOI> ^M [ 439.755663] [<ffffffff81554350>] ? _raw_spin_unlock_irq+0x32/0x4a^M [ 439.755663] [<ffffffff8106a98b>] finish_task_switch+0xe0/0x163^M [ 439.755663] [<ffffffff8106a94d>] ? finish_task_switch+0xa2/0x163^M [ 439.755663] [<ffffffff81550066>] __schedule+0x469/0x6cd^M [ 439.755663] [<ffffffff8155039b>] schedule+0x82/0x9a^M [ 439.789267] [<ffffffff8119b28b>] signalfd_read+0x186/0x49a^M [ 439.790911] [<ffffffff8106d86a>] ? wake_up_q+0x47/0x47^M [ 439.790911] [<ffffffff811618c2>] __vfs_read+0x28/0x9f^M [ 439.790911] [<ffffffff8117a289>] ? __fget_light+0x4d/0x74^M [ 439.790911] [<ffffffff811620a7>] vfs_read+0x7a/0xc6^M [ 439.790911] [<ffffffff8116292b>] SyS_read+0x49/0x7f^M [ 439.790911] [<ffffffff81554c17>] entry_SYSCALL_64_fastpath+0x12/0x6f^M [ 439.790911] Code: 48 89 e5 e8 a9 b8 e7 ff 5d c3 0f 1f 44 00 00 55 89 f2 48 89 e5 41 54 41 89 f4 53 48 8b 47 60 48 8b 1c d0 48 8b 7b 30 48 8b 53 38 <48> 8b 87 58 01 00 00 48 85 c0 75 09 48 8b 97 88 0c 00 00 eb 10 ^M [ 439.790911] RIP [<ffffffff812d89ba>] blk_mq_tag_to_rq+0x21/0x6e^M [ 439.790911] RSP <ffff880819203da0>^M [ 439.790911] CR2: 0000000000000158^M [ 439.790911] ---[ end trace d40af58949325661 ]---^M
--- block/blk-flush.c | 15 ++++++++++++++- block/blk-mq-tag.c | 2 +- block/blk-mq-tag.h | 12 ++++++++++++ block/blk-mq.c | 16 +--------------- block/blk.h | 6 ++++++ 5 files changed, 34 insertions(+), 17 deletions(-)
block/blk-flush.c +14 -1
@@ -73,6 +73,7 @@#include "blk.h" #include "blk-mq.h" +#include "blk-mq-tag.h" /* FLUSH/FUA sequences */ enum {
@@ -226,7 +227,12 @@ static void flush_end_io(struct requeststruct blk_flush_queue *fq =blk_get_flush_queue (q, flush_rq->mq_ctx);if (q->mq_ops) { +struct blk_mq_hw_ctx *hctx; + +/* release the tag's ownership to the req cloned from */ spin_lock_irqsave (&fq->mq_flush_lock, flags); + hctx = q->mq_ops->map_queue (q, flush_rq->mq_ctx->cpu); +blk_mq_tag_set_rq (hctx, flush_rq->tag, fq->orig_rq); flush_rq->tag =-1 ; }
@@ -308,11 +314,18 @@ static bool blk_kick_flush(struct reques/* * Borrow tag from the first request since they can't -* be in flight at the same time. +* be in flight at the same time. And acquire the tag's +* ownership for flush req. */ if (q->mq_ops) { +struct blk_mq_hw_ctx *hctx; + flush_rq->mq_ctx = first_rq->mq_ctx; flush_rq->tag = first_rq->tag; + fq->orig_rq = first_rq; + + hctx = q->mq_ops->map_queue (q, first_rq->mq_ctx->cpu); +blk_mq_tag_set_rq (hctx, first_rq->tag, flush_rq); } flush_rq->cmd_type =REQ_TYPE_FS ;
block/blk-mq-tag.c +1 -1
@@ -403,7 +403,7 @@ static void bt_for_each(struct blk_mq_hwfor (bit =find_first_bit (&bm->word, bm->depth); bit < bm->depth; bit =find_next_bit (&bm->word, bm->depth, bit +1 )) { - rq =blk_mq_tag_to_rq (hctx->tags, off + bit); + rq = hctx->tags->rqs[off + bit];if (rq->q == hctx->queue)fn (hctx, rq, data, reserved); }
block/blk-mq-tag.h +12 -0
@@ -85,4 +85,16 @@ static inline void blk_mq_tag_idle(struc __blk_mq_tag_idle(hctx); } +/* +* This helper should only be used for flush request to share tag +* with the request cloned from, and both the two requests can't be +* in flight at the same time. The caller has to make sure the tag +* can't be freed. +*/ +static inline void blk_mq_tag_set_rq (struct blk_mq_hw_ctx *hctx, +unsigned int tag,struct request *rq) +{ + hctx->tags->rqs[tag] = rq; +} +#endif
block/blk-mq.c +1 -15
@@ -498,23 +498,9 @@ void blk_mq_kick_requeue_list(struct req }EXPORT_SYMBOL (blk_mq_kick_requeue_list); -static inline bool is_flush_request (struct request *rq, -struct blk_flush_queue *fq,unsigned int tag) -{ -return ((rq->cmd_flags &REQ_FLUSH_SEQ ) && - fq->flush_rq->tag == tag); -} -struct request *blk_mq_tag_to_rq (struct blk_mq_tags *tags,unsigned int tag) { -struct request *rq = tags->rqs[tag]; -/* mq_ctx of flush rq is always cloned from the corresponding req */ -struct blk_flush_queue *fq =blk_get_flush_queue (rq->q, rq->mq_ctx); - -if (!is_flush_request (rq, fq, tag)) -return rq; - -return fq->flush_rq; +return tags->rqs[tag]; }EXPORT_SYMBOL (blk_mq_tag_to_rq);
block/blk.h +6 -0
@@ -22,6 +22,12 @@ struct blk_flush_queue {struct list_head flush_queue[2 ];struct list_head flush_data_in_flight;struct request *flush_rq; + +/* +* flush_rq shares tag with this rq, both can't be active +* at the same time +*/ +struct request *orig_rq;spinlock_t mq_flush_lock; };
Greg Kroah-Hartman
maintainerPATCH 2/27 ALSA: timer: Add missing mutex lock for compat ioctls
In reply to Greg Kroah-Hartman3.18-stable review patch. If anyone has any objections, please let me know.
------------------
From: Takashi Iwai <[email protected]>
commit 79fb0518fec8c8b4ea7f1729f54f293724b3dbb0 upstream.
The races among ioctl and other operations were protected by the commit af368027a49a ("ALSA: timer: Fix race among timer ioctls") and later fixes, but one code path was forgotten in the scenario: the 32bit compat ioctl. As syzkaller recently spotted, a very similar use-after-free may happen with the combination of compat ioctls.
The fix is simply to apply the same ioctl_lock to the compat_ioctl callback, too.
Reference: http://lkml.kernel.org/r/[email protected]
--- sound/core/timer_compat.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-)
sound/core/timer_compat.c +15 -2
@@ -106,7 +106,8 @@ enum {#endif /* CONFIG_X86_X32 */ }; -static long snd_timer_user_ioctl_compat (struct file *file,unsigned int cmd,unsigned long arg) +static long __snd_timer_user_ioctl_compat (struct file *file,unsigned int cmd, +unsigned long arg) {void __user *argp =compat_ptr (arg);
@@ -127,7 +128,7 @@ static long snd_timer_user_ioctl_compat(case SNDRV_TIMER_IOCTL_PAUSE :case SNDRV_TIMER_IOCTL_PAUSE_OLD :case SNDRV_TIMER_IOCTL_NEXT_DEVICE : -return snd_timer_user_ioctl (file, cmd, (unsigned long )argp); +return __snd_timer_user_ioctl (file, cmd, (unsigned long )argp);case SNDRV_TIMER_IOCTL_INFO32 :return snd_timer_user_info_compat (file, argp);case SNDRV_TIMER_IOCTL_STATUS32 :
@@ -139,3 +140,15 @@ static long snd_timer_user_ioctl_compat( }return -ENOIOCTLCMD ; } + +static long snd_timer_user_ioctl_compat (struct file *file,unsigned int cmd, +unsigned long arg) +{ +struct snd_timer_user *tu = file->private_data; +long ret; + +mutex_lock (&tu->ioctl_lock); + ret =__snd_timer_user_ioctl_compat (file, cmd, arg); +mutex_unlock (&tu->ioctl_lock); +return ret; +}
Greg Kroah-Hartman
maintainerPATCH 3/27 ALSA: seq: Fix nested rwsem annotation for lockdep splat
In reply to Greg Kroah-Hartman3.18-stable review patch. If anyone has any objections, please let me know.
------------------
From: Takashi Iwai <[email protected]>
commit 1f20f9ff57ca23b9f5502fca85ce3977e8496cb1 upstream.
syzkaller reported the lockdep splat due to the possible deadlock of grp->list_mutex of each sequencer client object. Actually this is rather a false-positive report due to the missing nested lock annotations. The sequencer client may deliver the event directly to another client which takes another own lock.
For addressing this issue, this patch replaces the simple down_read() with down_read_nested(). As a lock subclass, the already existing "hop" can be re-used, which indicates the depth of the call.
Reference: http://lkml.kernel.org/r/[email protected]
--- sound/core/seq/seq_clientmgr.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
sound/core/seq/seq_clientmgr.c +1 -1
@@ -676,7 +676,7 @@ static int deliver_to_subscribers(structif (atomic)read_lock (&grp->list_lock);else -down_read (&grp->list_mutex); +down_read_nested (&grp->list_mutex, hop);list_for_each_entry (subs, &grp->list_head, src_list) {/* both ports ready? */ if (atomic_read (&subs->ref_count) !=2 )
Greg Kroah-Hartman
maintainerPATCH 4/27 cifs: check MaxPathNameComponentLength != 0 before using it
In reply to Greg Kroah-Hartman3.18-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ronnie Sahlberg <[email protected]>
commit f74bc7c6679200a4a83156bb89cbf6c229fe8ec0 upstream.
And fix tcon leak in error path.
--- fs/cifs/dir.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
fs/cifs/dir.c +3 -2
@@ -193,7 +193,8 @@ check_name(struct dentry *direntry, strustruct cifs_sb_info *cifs_sb =CIFS_SB (direntry->d_sb);int i; -if (unlikely (direntry->d_name.len > +if (unlikely (tcon->fsAttrInfo.MaxPathNameComponentLength && + direntry->d_name.len >le32_to_cpu (tcon->fsAttrInfo.MaxPathNameComponentLength)))return -ENAMETOOLONG ;
@@ -509,7 +510,7 @@ cifs_atomic_open(struct inode *inode, st rc =check_name (direntry, tcon);if (rc) - goto out_free_xid; + goto out; server = tcon->ses->server;
Greg Kroah-Hartman
maintainerPATCH 5/27 KEYS: return full count in keyring_read() if buffer is too small
In reply to Greg Kroah-Hartman3.18-stable review patch. If anyone has any objections, please let me know.
------------------
From: Eric Biggers <[email protected]>
commit 3239b6f29bdfb4b0a2ba59df995fc9e6f4df7f1f upstream.
Commit e645016abc80 ("KEYS: fix writing past end of user-supplied buffer in keyring_read()") made keyring_read() stop corrupting userspace memory when the user-supplied buffer is too small. However it also made the return value in that case be the short buffer size rather than the size required, yet keyctl_read() is actually documented to return the size required. Therefore, switch it over to the documented behavior.
Note that for now we continue to have it fill the short buffer, since it did that before (pre-v3.13) and dump_key_tree_aux() in keyutils arguably relies on it.
--- security/keys/keyring.c | 39 +++++++++++++++++++-------------------- 1 file changed, 19 insertions(+), 20 deletions(-)
security/keys/keyring.c +19 -20
@@ -452,34 +452,33 @@ static long keyring_read(const struct ke char __user *buffer, size_t buflen) {struct keyring_read_iterator_context ctx; -unsigned long nr_keys; -int ret; +long ret;kenter ("{%d},,%zu" ,key_serial (keyring), buflen);if (buflen & (sizeof (key_serial_t) -1 ))return -EINVAL ; - nr_keys = keyring->keys.nr_leaves_on_tree; -if (nr_keys ==0 ) -return 0 ; - -/* Calculate how much data we could return */ -if (!buffer || !buflen) -return nr_keys *sizeof (key_serial_t); - -/* Copy the IDs of the subscribed keys into the buffer */ - ctx.buffer = (key_serial_t __user *)buffer; - ctx.buflen = buflen; - ctx.count =0 ; - ret =assoc_array_iterate (&keyring->keys, keyring_read_iterator, &ctx); -if (ret <0 ) { -kleave (" = %d [iterate]" , ret); -return ret; +/* Copy as many key IDs as fit into the buffer */ +if (buffer && buflen) { + ctx.buffer = (key_serial_t __user *)buffer; + ctx.buflen = buflen; + ctx.count =0 ; + ret =assoc_array_iterate (&keyring->keys, + keyring_read_iterator, &ctx); +if (ret <0 ) { +kleave (" = %ld [iterate]" , ret); +return ret; + } } -kleave (" = %zu [ok]" , ctx.count); -return ctx.count; +/* Return the size of the buffer needed */ + ret = keyring->keys.nr_leaves_on_tree *sizeof (key_serial_t); +if (ret <= buflen) +kleave ("= %ld [ok]" , ret); +else +kleave ("= %ld [buffer too small]" , ret); +return ret; }/*
Greg Kroah-Hartman
maintainerPATCH 6/27 KEYS: fix out-of-bounds read during ASN.1 parsing
In reply to Greg Kroah-Hartman3.18-stable review patch. If anyone has any objections, please let me know.
------------------
From: Eric Biggers <[email protected]>
commit 2eb9eabf1e868fda15808954fb29b0f105ed65f1 upstream.
syzkaller with KASAN reported an out-of-bounds read in asn1_ber_decoder(). It can be reproduced by the following command, assuming CONFIG_X509_CERTIFICATE_PARSER=y and CONFIG_KASAN=y:
keyctl add asymmetric desc $'\x30\x30' @s
The bug is that the length of an ASN.1 data value isn't validated in the case where it is encoded using the short form, causing the decoder to read past the end of the input buffer. Fix it by validating the length.
The bug report was:
BUG: KASAN: slab-out-of-bounds in asn1_ber_decoder+0x10cb/0x1730 lib/asn1_decoder.c:233
Read of size 1 at addr ffff88003cccfa02 by task syz-executor0/6818
CPU: 1 PID: 6818 Comm: syz-executor0 Not tainted 4.14.0-rc7-00008-g5f479447d983 #2
Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Bochs 01/01/2011
Call Trace:
__dump_stack lib/dump_stack.c:16 [inline]
dump_stack+0xb3/0x10b lib/dump_stack.c:52
print_address_description+0x79/0x2a0 mm/kasan/report.c:252
kasan_report_error mm/kasan/report.c:351 [inline]
kasan_report+0x236/0x340 mm/kasan/report.c:409
__asan_report_load1_noabort+0x14/0x20 mm/kasan/report.c:427
asn1_ber_decoder+0x10cb/0x1730 lib/asn1_decoder.c:233
x509_cert_parse+0x1db/0x650 crypto/asymmetric_keys/x509_cert_parser.c:89
x509_key_preparse+0x64/0x7a0 crypto/asymmetric_keys/x509_public_key.c:174
asymmetric_key_preparse+0xcb/0x1a0 crypto/asymmetric_keys/asymmetric_type.c:388
key_create_or_update+0x347/0xb20 security/keys/key.c:855
SYSC_add_key security/keys/keyctl.c:122 [inline]
SyS_add_key+0x1cd/0x340 security/keys/keyctl.c:62
entry_SYSCALL_64_fastpath+0x1f/0xbe
RIP: 0033:0x447c89
RSP: 002b:00007fca7a5d3bd8 EFLAGS: 00000246 ORIG_RAX: 00000000000000f8
RAX: ffffffffffffffda RBX: 00007fca7a5d46cc RCX: 0000000000447c89
RDX: 0000000020006f4a RSI: 0000000020006000 RDI: 0000000020001ff5
RBP: 0000000000000046 R08: fffffffffffffffd R09: 0000000000000000
R10: 0000000000000002 R11: 0000000000000246 R12: 0000000000000000
R13: 0000000000000000 R14: 00007fca7a5d49c0 R15: 00007fca7a5d4700--- lib/asn1_decoder.c | 3 +++ 1 file changed, 3 insertions(+)
lib/asn1_decoder.c +3 -0
@@ -276,6 +276,9 @@ next_op:if (unlikely (len > datalen - dp)) goto data_overrun_error; } + }else { +if (unlikely (len > datalen - dp)) + goto data_overrun_error; }if (flags &FLAG_CONS ) {
Greg Kroah-Hartman
maintainerPATCH 7/27 ASoC: adau17x1: Workaround for noise bug in ADC
In reply to Greg Kroah-Hartman3.18-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ricard Wanderlof <[email protected]>
commit 1e6f4fc06f6411adf98bbbe7fcd79442cd2b2a75 upstream.
The ADC in the ADAU1361 (and possibly other Analog Devices codecs) exhibits a cyclic variation in the noise floor (in our test setup between -87 and -93 dB), a new value being attained within this range whenever a new capture stream is started. The cycle repeats after about 10 or 11 restarts.
The workaround recommended by the manufacturer is to toggle the ADOSR bit in the Converter Control 0 register each time a new capture stream is started.
I have verified that the patch fixes this problem on the ADAU1361, and according to the manufacturer toggling the bit in question in this manner will at least have no detrimental effect on other chips served by this driver.
--- sound/soc/codecs/adau17x1.c | 24 +++++++++++++++++++++++- sound/soc/codecs/adau17x1.h | 2 ++ 2 files changed, 25 insertions(+), 1 deletion(-)
sound/soc/codecs/adau17x1.c +23 -1
@@ -88,6 +88,27 @@ static int adau17x1_pll_event(struct sndreturn 0 ; } +static int adau17x1_adc_fixup (struct snd_soc_dapm_widget *w, +struct snd_kcontrol *kcontrol,int event) +{ +struct snd_soc_codec *codec =snd_soc_dapm_to_codec (w->dapm); +struct adau *adau =snd_soc_codec_get_drvdata (codec); + +/* +* If we are capturing, toggle the ADOSR bit in Converter Control 0 to +* avoid losing SNR (workaround from ADI). This must be done after +* the ADC(s) have been enabled. According to the data sheet, it is +* normally illegal to set this bit when the sampling rate is 96 kHz, +* but according to ADI it is acceptable for this workaround. +*/ +regmap_update_bits (adau->regmap,ADAU17X1_CONVERTER0 , +ADAU17X1_CONVERTER0_ADOSR ,ADAU17X1_CONVERTER0_ADOSR ); +regmap_update_bits (adau->regmap,ADAU17X1_CONVERTER0 , +ADAU17X1_CONVERTER0_ADOSR ,0 ); + +return 0 ; +} +static const char *const adau17x1_mono_stereo_text[] = {"Stereo" ,"Mono Left Channel (L+R)" ,
@@ -119,7 +140,8 @@ static const struct snd_soc_dapm_widgetSND_SOC_DAPM_MUX ("Right DAC Mode Mux" ,SND_SOC_NOPM ,0 ,0 , &adau17x1_dac_mode_mux), -SND_SOC_DAPM_ADC ("Left Decimator" ,NULL ,ADAU17X1_ADC_CONTROL ,0 ,0 ), +SND_SOC_DAPM_ADC_E ("Left Decimator" ,NULL ,ADAU17X1_ADC_CONTROL ,0 ,0 , + adau17x1_adc_fixup,SND_SOC_DAPM_POST_PMU ),SND_SOC_DAPM_ADC ("Right Decimator" ,NULL ,ADAU17X1_ADC_CONTROL ,1 ,0 ),SND_SOC_DAPM_DAC ("Left DAC" ,NULL ,ADAU17X1_DAC_CONTROL0 ,0 ,0 ), SND_SOC_DAPM_DAC("Right DAC", NULL, ADAU17X1_DAC_CONTROL0, 1, 0),
sound/soc/codecs/adau17x1.h +2 -0
@@ -119,5 +119,7 @@ bool adau17x1_has_dsp(struct adau *adau)#define ADAU17X1_CONVERTER0_CONVSR_MASK 0x7 +#define ADAU17X1_CONVERTER0_ADOSR BIT(3) +#endif
Greg Kroah-Hartman
maintainerPATCH 8/27 arm64: ensure __dump_instr() checks addr_limit
In reply to Greg Kroah-Hartman3.18-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mark Rutland <[email protected]>
commit 7a7003b1da010d2b0d1dc8bf21c10f5c73b389f1 upstream.
It's possible for a user to deliberately trigger __dump_instr with a chosen kernel address.
Let's avoid problems resulting from this by using get_user() rather than __get_user(), ensuring that we don't erroneously access kernel memory.
Where we use __dump_instr() on kernel text, we already switch to KERNEL_DS, so this shouldn't adversely affect those cases.
--- arch/arm64/kernel/traps.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm64/kernel/traps.c +1 -1
@@ -115,7 +115,7 @@ static void dump_instr(const char *lvl,for (i =-4 ; i <1 ; i++) {unsigned int val, bad; - bad =__get_user (val, &((u32 *)addr)[i]); + bad =get_user (val, &((u32 *)addr)[i]);if (!bad) p +=sprintf (p, i ==0 ?"(%08x) " :"%08x " , val);
Greg Kroah-Hartman
maintainerPATCH 9/27 ARM: 8715/1: add a private asm/unaligned.h
In reply to Greg Kroah-Hartman3.18-stable review patch. If anyone has any objections, please let me know.
------------------
From: Arnd Bergmann <[email protected]>
commit 1cce91dfc8f7990ca3aea896bfb148f240b12860 upstream.
The asm-generic/unaligned.h header provides two different implementations for accessing unaligned variables: the access_ok.h version used when CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS is set pretends that all pointers are in fact aligned, while the le_struct.h version convinces gcc that the alignment of a pointer is '1', to make it issue the correct load/store instructions depending on the architecture flags.
On ARMv5 and older, we always use the second version, to let the compiler use byte accesses. On ARMv6 and newer, we currently use the access_ok.h version, so the compiler can use any instruction including stm/ldm and ldrd/strd that will cause an alignment trap. This trap can significantly impact performance when we have to do a lot of fixups and, worse, has led to crashes in the LZ4 decompressor code that does not have a trap handler.
This adds an ARM specific version of asm/unaligned.h that uses the le_struct.h/be_struct.h implementation unconditionally. This should lead to essentially the same code on ARMv6+ as before, with the exception of using regular load/store instructions instead of the trapping instructions multi-register variants.
The crash in the LZ4 decompressor code was probably introduced by the patch replacing the LZ4 implementation, commit 4e1a33b105dd ("lib: update LZ4 compressor module"), so linux-4.11 and higher would be affected most. However, we probably want to have this backported to all older stable kernels as well, to help with the performance issues.
There are two follow-ups that I think we should also work on, but not backport to stable kernels, first to change the asm-generic version of the header to remove the ARM special case, and second to review all other uses of CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS to see if they might be affected by the same problem on ARM.
--- arch/arm/include/asm/Kbuild | 1 - arch/arm/include/asm/unaligned.h | 27 +++++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-)
arch/arm/include/asm/Kbuild +0 -1
@@ -37,4 +37,3 @@ generic-y += termbits.h generic-y += termios.h generic-y += timex.h generic-y += trace_clock.h -generic-y += unaligned.h
arch/arm/include/asm/unaligned.h new file +27 -0
@@ -0,0 +1,27 @@ +#ifndef __ASM_ARM_UNALIGNED_H +#define __ASM_ARM_UNALIGNED_H + +/* +* We generally want to set CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS on ARMv6+, +* but we don't want to use linux/unaligned/access_ok.h since that can lead +* to traps on unaligned stm/ldm or strd/ldrd. +*/ +#include <asm/byteorder.h> + +#if defined(__LITTLE_ENDIAN) +# include <linux/unaligned/le_struct.h> +# include <linux/unaligned/be_byteshift.h> +# include <linux/unaligned/generic.h> +# define get_unaligned __get_unaligned_le +# define put_unaligned __put_unaligned_le +#elif defined(__BIG_ENDIAN) +# include <linux/unaligned/be_struct.h> +# include <linux/unaligned/le_byteshift.h> +# include <linux/unaligned/generic.h> +# define get_unaligned __get_unaligned_be +# define put_unaligned __put_unaligned_be +#else +# error need to define endianess +#endif + +#endif /* __ASM_ARM_UNALIGNED_H */
Greg Kroah-Hartman
maintainerPATCH 10/27 ocfs2: fstrim: Fix start offset of first cluster group during fstrim
In reply to Greg Kroah-Hartman3.18-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ashish Samant <[email protected]>
commit 105ddc93f06ebe3e553f58563d11ed63dbcd59f0 upstream.
The first cluster group descriptor is not stored at the start of the group but at an offset from the start. We need to take this into account while doing fstrim on the first cluster group. Otherwise we will wrongly start fstrim a few blocks after the desired start block and the range can cross over into the next cluster group and zero out the group descriptor there. This can cause filesytem corruption that cannot be fixed by fsck.
--- fs/ocfs2/alloc.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-)
fs/ocfs2/alloc.c +18 -6
@@ -7235,13 +7235,24 @@ out:static int ocfs2_trim_extent (struct super_block *sb,struct ocfs2_group_desc *gd, -u32 start,u32 count) +u64 group,u32 start,u32 count) {u64 discard, bcount; +struct ocfs2_super *osb =OCFS2_SB (sb); bcount =ocfs2_clusters_to_blocks (sb, count); - discard =le64_to_cpu (gd->bg_blkno) + -ocfs2_clusters_to_blocks (sb, start); + discard =ocfs2_clusters_to_blocks (sb, start); + +/* +* For the first cluster group, the gd->bg_blkno is not at the start +* of the group, but at an offset from the start. If we add it while +* calculating discard for first group, we will wrongly start fstrim a +* few blocks after the desried start block and the range can cross +* over into the next cluster group. So, add it only if this is not +* the first cluster group. +*/ +if (group != osb->first_cluster_group_blkno) + discard +=le64_to_cpu (gd->bg_blkno);trace_ocfs2_trim_extent (sb, (unsigned long long )discard, bcount);
@@ -7249,7 +7260,7 @@ static int ocfs2_trim_extent(struct supe }static int ocfs2_trim_group (struct super_block *sb, -struct ocfs2_group_desc *gd, +struct ocfs2_group_desc *gd,u64 group,u32 start,u32 max,u32 minbits) {int ret =0 , count =0 , next;
@@ -7268,7 +7279,7 @@ static int ocfs2_trim_group(struct super next =ocfs2_find_next_bit (bitmap, max, start);if ((next - start) >= minbits) { - ret =ocfs2_trim_extent (sb, gd, + ret =ocfs2_trim_extent (sb, gd, group, start, next - start);if (ret <0 ) {mlog_errno (ret);
@@ -7366,7 +7377,8 @@ int ocfs2_trim_fs(struct super_block *sb } gd = (struct ocfs2_group_desc *)gd_bh->b_data; - cnt =ocfs2_trim_group (sb, gd, first_bit, last_bit, minlen); + cnt =ocfs2_trim_group (sb, gd, group, + first_bit, last_bit, minlen);brelse (gd_bh); gd_bh =NULL ;if (cnt <0 ) {
Greg Kroah-Hartman
maintainerPATCH 11/27 drm/msm: Fix potential buffer overflow issue
In reply to Greg Kroah-Hartman3.18-stable review patch. If anyone has any objections, please let me know.
------------------
From: Kasin Li <[email protected]>
commit 4a630fadbb29d9efaedb525f1a8f7449ad107641 upstream.
In function submit_create, if nr_cmds or nr_bos is assigned with negative value, the allocated buffer may be small than intended. Using this buffer will lead to buffer overflow issue.
--- drivers/gpu/drm/msm/msm_gem_submit.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
drivers/gpu/drm/msm/msm_gem_submit.c +5 -2
@@ -34,10 +34,13 @@ static inline void __user *to_user_ptr(u }static struct msm_gem_submit *submit_create (struct drm_device *dev, -struct msm_gpu *gpu,int nr) + struct msm_gpu *gpu, uint32_t int nr) {struct msm_gem_submit *submit; -int sz =sizeof (*submit) + (nr *sizeof (submit->bos[0 ])); +uint64_t sz =sizeof (*submit) + (nr *sizeof (submit->bos[0 ])); + +if (sz >SIZE_MAX ) +return NULL ; submit =kmalloc (sz,GFP_TEMPORARY | __GFP_NOWARN | __GFP_NORETRY);if (submit) {
Greg Kroah-Hartman
maintainerPATCH 12/27 drm/msm: fix an integer overflow test
In reply to Greg Kroah-Hartman3.18-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dan Carpenter <[email protected]>
commit 65e93108891e571f177c202add9288eda9ac4100 upstream.
We recently added an integer overflow check but it needs an additional tweak to work properly on 32 bit systems.
The problem is that we're doing the right hand side of the assignment as type unsigned long so the max it will have an integer overflow instead of being larger than SIZE_MAX. That means the "sz > SIZE_MAX" condition is never true even on 32 bit systems. We need to first cast it to u64 and then do the math.
--- drivers/gpu/drm/msm/msm_gem_submit.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/gpu/drm/msm/msm_gem_submit.c +1 -1
@@ -37,7 +37,7 @@ static struct msm_gem_submit *submit_cre struct msm_gpu *gpu, uint32_t int nr) {struct msm_gem_submit *submit; -uint64_t sz =sizeof (*submit) + (nr *sizeof (submit->bos[0 ])); +uint64_t sz =sizeof (*submit) + ((u64 )nr *sizeof (submit->bos[0 ]));if (sz >SIZE_MAX )return NULL ;
Greg Kroah-Hartman
maintainerPATCH 13/27 x86/microcode/intel: Disable late loading on model 79
In reply to Greg Kroah-Hartman3.18-stable review patch. If anyone has any objections, please let me know.
------------------
From: Borislav Petkov <[email protected]>
commit 723f2828a98c8ca19842042f418fb30dd8cfc0f7 upstream.
Blacklist Broadwell X model 79 for late loading due to an erratum.
--- arch/x86/kernel/cpu/microcode/intel.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+)
arch/x86/kernel/cpu/microcode/intel.c +18 -0
@@ -267,6 +267,18 @@ static int get_ucode_fw(void *to, constreturn 0 ; } +static bool is_blacklisted (unsigned int cpu) +{ +struct cpuinfo_x86 *c = &cpu_data (cpu); + +if (c->x86 ==6 && c->x86_model ==79 ) { +pr_err_once ("late loading on model 79 is disabled.\n" ); +return true; + } + +return false; +} +static enum ucode_state request_microcode_fw (int cpu,struct device *device,bool refresh_fw) {
@@ -275,6 +287,9 @@ static enum ucode_state request_microcodconst struct firmware *firmware;enum ucode_state ret; +if (is_blacklisted (cpu)) +return UCODE_NFOUND ; +sprintf (name,"intel-ucode/%02x-%02x-%02x" , c->x86, c->x86_model, c->x86_mask);
@@ -299,6 +314,9 @@ static int get_ucode_user(void *to, consstatic enum ucode_state request_microcode_user (int cpu,const void __user *buf,size_t size) { +if (is_blacklisted (cpu)) +return UCODE_NFOUND ; +return generic_load_microcode (cpu, (void *)buf, size, &get_ucode_user); }
Greg Kroah-Hartman
maintainerPATCH 14/27 mmc: s3cmci: include linux/interrupt.h for tasklet_struct
In reply to Greg Kroah-Hartman3.18-stable review patch. If anyone has any objections, please let me know.
------------------
From: Arnd Bergmann <[email protected]>
[ Upstream commit e1c6ec26b853e9062f0b3daaf695c546d0702953 ]
I got this new build error on today's linux-next
drivers/mmc/host/s3cmci.h:69:24: error: field 'pio_tasklet' has incomplete type
struct tasklet_struct pio_tasklet;drivers/mmc/host/s3cmci.c: In function 's3cmci_enable_irq':drivers/mmc/host/s3cmci.c:390:4: error: implicit declaration of function 'enable_irq';did you mean 'enable_imask'? [-Werror=implicit-function-declaration]
While I haven't found out why this happened now and not earlier, the solution is obvious, we should include the header that defines the structure.
--- drivers/mmc/host/s3cmci.c | 1 + 1 file changed, 1 insertion(+)
drivers/mmc/host/s3cmci.c +1 -0
@@ -21,6 +21,7 @@#include <linux/debugfs.h> #include <linux/seq_file.h> #include <linux/gpio.h> +#include <linux/interrupt.h> #include <linux/irq.h> #include <linux/io.h>
Greg Kroah-Hartman
maintainerPATCH 15/27 staging: rtl8712u: Fix endian settings for structs describing network packets
In reply to Greg Kroah-Hartman3.18-stable review patch. If anyone has any objections, please let me know.
------------------
From: Larry Finger <[email protected]>
[ Upstream commit 221c46d28957bd6e2158abc2179ce4a8c9ce07d3 ]
The headers describing a number of network packets do not have the correct endian settings for several types of data.
--- drivers/staging/rtl8712/ieee80211.h | 84 ++++++++++++++++++------------------ 1 file changed, 42 insertions(+), 42 deletions(-)
drivers/staging/rtl8712/ieee80211.h +42 -42
@@ -142,52 +142,52 @@ struct ieee_ibss_seq { };struct ieee80211_hdr { -u16 frame_ctl; -u16 duration_id; +__le16 frame_ctl; +__le16 duration_id;u8 addr1[ETH_ALEN ];u8 addr2[ETH_ALEN ];u8 addr3[ETH_ALEN ]; -u16 seq_ctl; +__le16 seq_ctl;u8 addr4[ETH_ALEN ]; -} __packed; +} __packed__aligned(2) ;struct ieee80211_hdr_3addr { -u16 frame_ctl; -u16 duration_id; +__le16 frame_ctl; +__le16 duration_id;u8 addr1[ETH_ALEN ];u8 addr2[ETH_ALEN ];u8 addr3[ETH_ALEN ]; -u16 seq_ctl; -} __packed; +__le16 seq_ctl; +} __packed__aligned(2) ;struct ieee80211_hdr_qos { -u16 frame_ctl; -u16 duration_id; +__le16 frame_ctl; +__le16 duration_id;u8 addr1[ETH_ALEN ];u8 addr2[ETH_ALEN ];u8 addr3[ETH_ALEN ]; -u16 seq_ctl; +__le16 seq_ctl;u8 addr4[ETH_ALEN ]; -u16 qc; -} __packed; +__le16 qc; +} __packed__aligned(2) ;struct ieee80211_hdr_3addr_qos { -u16 frame_ctl; -u16 duration_id; +__le16 frame_ctl; +__le16 duration_id;u8 addr1[ETH_ALEN ];u8 addr2[ETH_ALEN ];u8 addr3[ETH_ALEN ]; -u16 seq_ctl; -u16 qc; +__le16 seq_ctl; +__le16 qc; } __packed;struct eapol {u8 snap[6 ]; -u16 ethertype; +__be16 ethertype;u8 version;u8 type; -u16 length; +__le16 length; } __packed;
@@ -554,13 +554,13 @@ Total: 28-2340 bytes*/ struct ieee80211_header_data { -u16 frame_ctl; -u16 duration_id; +__le16 frame_ctl; +__le16 duration_id;u8 addr1[6 ];u8 addr2[6 ];u8 addr3[6 ]; -u16 seq_ctrl; -}; +__le16 seq_ctrl; +} __packed__aligned(2) ;#define BEACON_PROBE_SSID_ID_POSITION 12
@@ -592,18 +592,18 @@ struct ieee80211_info_element {/* * These are the data types that can make up management packets * -u16 auth_algorithm; -u16 auth_sequence; -u16 beacon_interval; -u16 capability; +__le16 auth_algorithm; +__le16 auth_sequence; +__le16 beacon_interval; +__le16 capability; u8 current_ap[ETH_ALEN]; -u16 listen_interval; +__le16 listen_interval; struct { u16 association_id:14, reserved:2; } __packed; -u32 time_stamp[2]; -u16 reason; -u16 status; +__le32 time_stamp[2]; +__le16 reason; +__le16 status; */ #define IEEE80211_DEFAULT_TX_ESSID "Penguin"
@@ -611,16 +611,16 @@ struct ieee80211_info_element {struct ieee80211_authentication {struct ieee80211_header_data header; -u16 algorithm; -u16 transaction; -u16 status; +__le16 algorithm; +__le16 transaction; +__le16 status; } __packed;struct ieee80211_probe_response {struct ieee80211_header_data header; -u32 time_stamp[2 ]; -u16 beacon_interval; -u16 capability; +__le32 time_stamp[2 ]; +__le16 beacon_interval; +__le16 capability;struct ieee80211_info_element info_element; } __packed;
@@ -630,16 +630,16 @@ struct ieee80211_probe_request {struct ieee80211_assoc_request_frame {struct ieee80211_hdr_3addr header; -u16 capability; -u16 listen_interval; +__le16 capability; +__le16 listen_interval;struct ieee80211_info_element_hdr info_element; } __packed;struct ieee80211_assoc_response_frame {struct ieee80211_hdr_3addr header; -u16 capability; -u16 status; -u16 aid; +__le16 capability; +__le16 status; +__le16 aid; } __packed;struct ieee80211_txb {
Greg Kroah-Hartman
maintainerPATCH 16/27 ext4: fix stripe-unaligned allocations
In reply to Greg Kroah-Hartman3.18-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jan Kara <[email protected]>
[ Upstream commit d9b22cf9f5466a057f2a4f1e642b469fa9d73117 ]
When a filesystem is created using:
mkfs.ext4 -b 4096 -E stride=512 <dev>
and we try to allocate 64MB extent, we will end up directly in ext4_mb_complex_scan_group(). This is because the request is detected as power-of-two allocation (so we start in ext4_mb_regular_allocator() with ac_criteria == 0) however the check before ext4_mb_simple_scan_group() refuses the direct buddy scan because the allocation request is too large. Since cr == 0, the check whether we should use ext4_mb_scan_aligned() fails as well and we fall back to ext4_mb_complex_scan_group().
Fix the problem by checking for upper limit on power-of-two requests directly when detecting them.
--- fs/ext4/mballoc.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
fs/ext4/mballoc.c +4 -2
@@ -2113,8 +2113,10 @@ ext4_mb_regular_allocator(struct ext4_al* We search using buddy data only if the order of the request * is greater than equal to the sbi_s_mb_order2_reqs * You can tune it via /sys/fs/ext4/<partition>/mb_order2_req +* We also support searching for power-of-two requests only for +* requests upto maximum buddy size we have constructed. */ -if (i >= sbi->s_mb_order2_reqs) { +if (i >= sbi->s_mb_order2_reqs && i <= sb->s_blocksize_bits +2 ) {/* * This should tell if fe_len is exactly power of 2 */
@@ -2176,7 +2178,7 @@ repeat: } ac->ac_groups_scanned++; -if (cr ==0 && ac->ac_2order < sb->s_blocksize_bits+2 ) +if (cr ==0 )ext4_mb_simple_scan_group (ac, &e4b);else if (cr ==1 && sbi->s_stripe && !(ac->ac_g_ex.fe_len % sbi->s_stripe))
Greg Kroah-Hartman
maintainerPATCH 17/27 ext4: do not use stripe_width if it is not set
In reply to Greg Kroah-Hartman3.18-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jan Kara <[email protected]>
[ Upstream commit 5469d7c3087ecaf760f54b447f11af6061b7c897 ]
Avoid using stripe_width for sbi->s_stripe value if it is not actually set. It prevents using the stride for sbi->s_stripe.
--- fs/ext4/super.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
fs/ext4/super.c +2 -2
@@ -2441,9 +2441,9 @@ static unsigned long ext4_get_stripe_sizif (sbi->s_stripe && sbi->s_stripe <= sbi->s_blocks_per_group) ret = sbi->s_stripe; -else if (stripe_width <= sbi->s_blocks_per_group) +else if (stripe_width && stripe_width <= sbi->s_blocks_per_group) ret = stripe_width; -else if (stride <= sbi->s_blocks_per_group) +else if (stride && stride <= sbi->s_blocks_per_group) ret = stride;else ret =0 ;
Greg Kroah-Hartman
maintainerPATCH 18/27 i2c: riic: correctly finish transfers
In reply to Greg Kroah-Hartman3.18-stable review patch. If anyone has any objections, please let me know.
------------------
From: Chris Brandt <[email protected]>
[ Upstream commit 71ccea095ea1d4efd004dab971be6d599e06fc3f ]
This fixes the condition where the controller has not fully completed its final transfer and leaves the bus and controller in a undesirable state.
At the end of the last transmitted byte, the existing driver would just signal for a STOP condition to be transmitted then immediately signal completion. However, the full STOP procedure might not have fully taken place by the time the runtime PM shuts off the peripheral clock, leaving the bus in a suspended state.
Alternatively, the STOP condition on the bus may have completed, but when the next transaction is requested by the upper layer, not all the necessary register cleanup was finished from the last transfer which made the driver return BUS BUSY when it really wasn't.
This patch now makes all transmit and receive transactions wait for the STOP condition to fully complete before signaling a completed transaction. With this new method, runtime PM no longer seems to be an issue.
--- drivers/i2c/busses/i2c-riic.c | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-)
drivers/i2c/busses/i2c-riic.c +23 -7
@@ -80,6 +80,7 @@#define ICIER_TEIE 0x40#define ICIER_RIE 0x20#define ICIER_NAKIE 0x10 +#define ICIER_SPIE 0x08#define ICSR2_NACKF 0x10
@@ -216,11 +217,10 @@ static irqreturn_t riic_tend_isr(int irqreturn IRQ_NONE ; } -if (riic->is_last || riic->err) +if (riic->is_last || riic->err) { +riic_clear_set_bit (riic,0 ,ICIER_SPIE ,RIIC_ICIER );writeb (ICCR2_SP , riic->base +RIIC_ICCR2 ); - -writeb (0 , riic->base +RIIC_ICIER ); -complete (&riic->msg_done); + }return IRQ_HANDLED ; }
@@ -240,13 +240,13 @@ static irqreturn_t riic_rdrf_isr(int irqif (riic->bytes_left ==1 ) {/* STOP must come before we set ACKBT! */ -if (riic->is_last) +if (riic->is_last) { +riic_clear_set_bit (riic,0 ,ICIER_SPIE ,RIIC_ICIER );writeb (ICCR2_SP , riic->base +RIIC_ICCR2 ); + }riic_clear_set_bit (riic,0 ,ICMR3_ACKBT ,RIIC_ICMR3 ); -writeb (0 , riic->base +RIIC_ICIER ); -complete (&riic->msg_done); }else {riic_clear_set_bit (riic,ICMR3_ACKBT ,0 ,RIIC_ICMR3 ); }
@@ -259,6 +259,21 @@ static irqreturn_t riic_rdrf_isr(int irqreturn IRQ_HANDLED ; } +static irqreturn_t riic_stop_isr (int irq,void *data) +{ +struct riic_dev *riic = data; + +/* read back registers to confirm writes have fully propagated */ +writeb (0 , riic->base +RIIC_ICSR2 ); +readb (riic->base +RIIC_ICSR2 ); +writeb (0 , riic->base +RIIC_ICIER ); +readb (riic->base +RIIC_ICIER ); + +complete (&riic->msg_done); + +return IRQ_HANDLED ; +} +static u32 riic_func (struct i2c_adapter *adap) {return I2C_FUNC_I2C |I2C_FUNC_SMBUS_EMUL ;
@@ -326,6 +341,7 @@ static struct riic_irq_desc riic_irqs[] { .res_num = 0, .isr = riic_tend_isr, .name = "riic-tend" }, { .res_num = 1, .isr = riic_rdrf_isr, .name = "riic-rdrf" }, { .res_num = 2, .isr = riic_tdre_isr, .name = "riic-tdre" }, + { .res_num = 3, .isr = riic_stop_isr, .name = "riic-stop" }, { .res_num = 5, .isr = riic_tend_isr, .name = "riic-nack" }, };
Greg Kroah-Hartman
maintainerPATCH 19/27 cx231xx: Fix I2C on Internal Master 3 Bus
In reply to Greg Kroah-Hartman3.18-stable review patch. If anyone has any objections, please let me know.
------------------
From: Oleh Kravchenko <[email protected]>
[ Upstream commit 6c5da8031a3abfad259190d35f83d89568b72ee2 ]
Internal Master 3 Bus can send and receive only 4 bytes per time.
--- drivers/media/usb/cx231xx/cx231xx-core.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)
drivers/media/usb/cx231xx/cx231xx-core.c +6 -1
@@ -365,7 +365,12 @@ int cx231xx_send_vendor_cmd(struct cx231*/ if ((ven_req->wLength >4 ) && ((ven_req->bRequest ==0x4 ) || (ven_req->bRequest ==0x5 ) || - (ven_req->bRequest ==0x6 ))) { + (ven_req->bRequest ==0x6 ) || + +/* Internal Master 3 Bus can send +* and receive only 4 bytes per time +*/ + (ven_req->bRequest ==0x2 ))) { unsend_size =0 ; pdata = ven_req->pBuff;
Greg Kroah-Hartman
maintainerPATCH 20/27 xen/manage: correct return value check on xenbus_scanf()
In reply to Greg Kroah-Hartman3.18-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jan Beulich <[email protected]>
[ Upstream commit 4fed1b125eb6252bde478665fc05d4819f774fa8 ]
A negative return value indicates an error; in fact the function at present won't ever return zero.
--- drivers/xen/manage.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/xen/manage.c +1 -1
@@ -272,7 +272,7 @@ static void sysrq_handler(struct xenbus_ err =xenbus_transaction_start (&xbt);if (err)return ; -if (!xenbus_scanf (xbt,"control" ,"sysrq" ,"%c" , &sysrq_key)) { +if (xenbus_scanf (xbt,"control" ,"sysrq" ,"%c" , &sysrq_key) <0 ) {pr_err ("Unable to read sysrq code in control/sysrq\n" );xenbus_transaction_end (xbt,1 );return ;
Greg Kroah-Hartman
maintainerPATCH 21/27 platform/x86: intel_mid_thermal: Fix module autoload
In reply to Greg Kroah-Hartman3.18-stable review patch. If anyone has any objections, please let me know.
------------------
From: Javier Martinez Canillas <[email protected]>
[ Upstream commit a93151a72061e944a4915458b1b1d6d505c03bbf ]
If the driver is built as a module, autoload won't work because the module alias information is not filled. So user-space can't match the registered device with the corresponding module.
Export the module alias information using the MODULE_DEVICE_TABLE() macro.
Before this patch:
$ modinfo drivers/platform/x86/intel_mid_thermal.ko | grep alias $
After this patch:
$ modinfo drivers/platform/x86/intel_mid_thermal.ko | grep alias alias: platform:msic_thermal
--- drivers/platform/x86/intel_mid_thermal.c | 1 + 1 file changed, 1 insertion(+)
drivers/platform/x86/intel_mid_thermal.c +1 -0
@@ -551,6 +551,7 @@ static const struct platform_device_id t { "msic_thermal", 1 }, { } }; +MODULE_DEVICE_TABLE(platform, therm_id_table); static struct platform_driver mid_thermal_driver = { .driver = {
Greg Kroah-Hartman
maintainerPATCH 22/27 staging: lustre: hsm: stack overrun in hai_dump_data_field
In reply to Greg Kroah-Hartman3.18-stable review patch. If anyone has any objections, please let me know.
------------------
From: frank zago <[email protected]>
[ Upstream commit 22aadb91c0a0055935109c175f5446abfb130702 ]
The function hai_dump_data_field will do a stack buffer overrun when cat'ing /sys/fs/lustre/.../hsm/actions if an action has some data in it.
hai_dump_data_field uses snprintf. But there is no check for truncation, and the value returned by snprintf is used as-is. The coordinator code calls hai_dump_data_field with 12 bytes in the buffer. The 6th byte of data is printed incompletely to make room for the terminating NUL. However snprintf still returns 2, so when hai_dump_data_field writes the final NUL, it does it outside the reserved buffer, in the 13th byte of the buffer. This stack buffer overrun hangs my VM.
Fix by checking that there is enough room for the next 2 characters plus the NUL terminator. Don't print half bytes. Change the format to 02X instead of .2X, which makes more sense.
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-8171
Reviewed-on: http://review.whamcloud.com/20338
--- drivers/staging/lustre/lustre/include/lustre/lustre_user.h | 18 +++++-------- 1 file changed, 8 insertions(+), 10 deletions(-)
drivers/staging/lustre/lustre/include/lustre/lustre_user.h +8 -10
@@ -1066,23 +1066,21 @@ struct hsm_action_item {* \retval buffer */ static inline char *hai_dump_data_field (struct hsm_action_item *hai, -char *buffer,int len) +char *buffer,size_t len) { -int i, sz, data_len; +int i, data_len;char *ptr; ptr = buffer; - sz = len; data_len = hai->hai_len -sizeof (*hai); -for (i =0 ; (i < data_len) && (sz >0 ) ; i++) { -int cnt; - - cnt =snprintf (ptr, sz,"%.2X" , - (unsigned char )hai->hai_data[i]); - ptr += cnt; - sz -= cnt; +for (i =0 ; (i < data_len) && (len >2 ); i++) { +snprintf (ptr,3 ,"%02X" , (unsigned char )hai->hai_data[i]); + ptr +=2 ; + len -=2 ; } + *ptr ='\0' ; +return buffer; }
Greg Kroah-Hartman
maintainerPATCH 23/27 staging: lustre: ptlrpc: skip lock if export failed
In reply to Greg Kroah-Hartman3.18-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alexander Boyko <[email protected]>
[ Upstream commit 4c43c27ddc461d8473cedd70f2549614641dfbc7 ]
This patch resolves IO vs eviction race.
After eviction failed export stayed at stale list,
a client had IO processing and reconnected during it. A client sent brw rpc with last lock cookie and new connection. The lock with failed export was found and assert was happened.
(ost_handler.c:1812:ost_prolong_lock_one())
ASSERTION( lock->l_export == opd->opd_exp ) failed:
1. Skip the lock at ldlm_handle2lock if lock export failed.
2. Validation of lock for IO was added at hpreq_check(). The lock searching is based on granted interval tree. If server doesn`t have a valid lock, it reply to client with ESTALE.
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-7702
Seagate-bug-id: MRP-2787
Reviewed-on: http://review.whamcloud.com/18120
--- drivers/staging/lustre/lustre/ldlm/ldlm_lock.c | 7 +++++++ drivers/staging/lustre/lustre/ptlrpc/service.c | 21 ++++++++------------- 2 files changed, 15 insertions(+), 13 deletions(-)
drivers/staging/lustre/lustre/ldlm/ldlm_lock.c +7 -0
@@ -573,6 +573,13 @@ struct ldlm_lock *__ldlm_handle2lock(conif (lock ==NULL )return NULL ; +if (lock->l_export && lock->l_export->exp_failed) { +CDEBUG (D_INFO ,"lock export failed: lock %p, exp %p\n" , + lock, lock->l_export); +LDLM_LOCK_PUT (lock); +return NULL ; + } +/* It's unlikely but possible that someone marked the lock as * destroyed after we did handle2object on it */ if (flags ==0 && ((lock->l_flags &LDLM_FL_DESTROYED )==0 )) {
drivers/staging/lustre/lustre/ptlrpc/service.c +8 -13
@@ -1506,20 +1506,15 @@ static int ptlrpc_server_hpreq_init(stru* it may hit swab race at LU-1044. */ if (req->rq_ops->hpreq_check) { rc = req->rq_ops->hpreq_check (req); -/** -* XXX: Out of all current -* ptlrpc_hpreq_ops::hpreq_check(), only -* ldlm_cancel_hpreq_check() can return an error code; -* other functions assert in similar places, which seems -* odd. What also does not seem right is that handlers -* for those RPCs do not assert on the same checks, but -* rather handle the error cases. e.g. see -* ost_rw_hpreq_check(), and ost_brw_read(), -* ost_brw_write(). +if (rc == -ESTALE ) { + req->rq_status = rc; +ptlrpc_error (req); + } +/** can only return error, +* 0 for normal request, +* or 1 for high priority request */ -if (rc <0 ) -return rc; -LASSERT (rc ==0 || rc ==1 ); +LASSERT (rc <=1 ); }spin_lock_bh (&req->rq_export->exp_rpc_lock);
Greg Kroah-Hartman
maintainerPATCH 24/27 s390/dasd: check for device error pointer within state change interrupts
In reply to Greg Kroah-Hartman3.18-stable review patch. If anyone has any objections, please let me know.
------------------
From: Stefan Haberland <[email protected]>
[ Upstream commit 2202134e48a3b50320aeb9e3dd1186833e9d7e66 ]
Check if the device pointer is valid. Just a sanity check since we already are in the int handler of the device.
--- drivers/s390/block/dasd.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
drivers/s390/block/dasd.c +5 -2
@@ -1672,8 +1672,11 @@ void dasd_int_handler(struct ccw_device/* check for for attention message */ if (scsw_dstat (&irb->scsw) &DEV_STAT_ATTENTION ) { device =dasd_device_from_cdev_locked (cdev); - device->discipline->check_attention (device, irb->esw.esw1.lpum); -dasd_put_device (device); +if (!IS_ERR (device)) { + device->discipline->check_attention (device, + irb->esw.esw1.lpum); +dasd_put_device (device); + } }if (!cqr)
Greg Kroah-Hartman
maintainerPATCH 25/27 bt8xx: fix memory leak
In reply to Greg Kroah-Hartman3.18-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sudip Mukherjee <[email protected]>
[ Upstream commit 6792eb0cf9310ec240b7e7c9bfa86dff4c758c68 ]
If dvb_attach() fails then we were just printing an error message and exiting but the memory allocated to state was not released.
--- drivers/media/pci/bt8xx/dvb-bt8xx.c | 1 + 1 file changed, 1 insertion(+)
drivers/media/pci/bt8xx/dvb-bt8xx.c +1 -0
@@ -680,6 +680,7 @@ static void frontend_init(struct dvb_bt8/* DST is not a frontend, attaching the ASIC */ if (dvb_attach (dst_attach, state, &card->dvb_adapter) ==NULL ) {pr_err ("%s: Could not find a Twinhan DST\n" , __func__); +kfree (state);break ; }/* Attach other DST peripherals if any */
Greg Kroah-Hartman
maintainerPATCH 26/27 xen: dont print error message in case of missing Xenstore entry
In reply to Greg Kroah-Hartman3.18-stable review patch. If anyone has any objections, please let me know.
------------------
From: Juergen Gross <[email protected]>
[ Upstream commit 4e93b6481c87ea5afde944a32b4908357ec58992 ]
When registering for the Xenstore watch of the node control/sysrq the handler will be called at once. Don't issue an error message if the Xenstore node isn't there, as it will be created only when an event is being triggered.
--- drivers/xen/manage.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-)
drivers/xen/manage.c +10 -2
@@ -272,8 +272,16 @@ static void sysrq_handler(struct xenbus_ err =xenbus_transaction_start (&xbt);if (err)return ; -if (xenbus_scanf (xbt,"control" ,"sysrq" ,"%c" , &sysrq_key) <0 ) { -pr_err ("Unable to read sysrq code in control/sysrq\n" ); + err =xenbus_scanf (xbt,"control" ,"sysrq" ,"%c" , &sysrq_key); +if (err <0 ) { +/* +* The Xenstore watch fires directly after registering it and +* after a suspend/resume cycle. So ENOENT is no error but +* might happen in those cases. +*/ +if (err != -ENOENT ) +pr_err ("Error %d reading sysrq code in control/sysrq\n" , + err);xenbus_transaction_end (xbt,1 );return ; }
Greg Kroah-Hartman
maintainerPATCH 27/27 staging: r8712u: Fix Sparse warning in rtl871x_xmit.c
In reply to Greg Kroah-Hartman3.18-stable review patch. If anyone has any objections, please let me know.
------------------
From: Larry Finger <[email protected]>
[ Upstream commit 07222e535831b916221dd2a48a3047ec7e45dc72 ]
Sparse reports the following:
CHECK drivers/staging/rtl8712/rtl871x_xmit.cdrivers/staging/rtl8712/rtl871x_xmit.c:350:44: warning: restricted __le32 degrades to integer drivers/staging/rtl8712/rtl871x_xmit.c:491:23: warning: incorrect type in initializer (different base types)drivers/staging/rtl8712/rtl871x_xmit.c:491:23: expected unsigned short [usertype] *fctrldrivers/staging/rtl8712/rtl871x_xmit.c:491:23: got restricted __le16 *<noident>drivers/staging/rtl8712/rtl871x_xmit.c:580:36: warning: incorrect type in assignment (different base types)drivers/staging/rtl8712/rtl871x_xmit.c:580:36: expected unsigned short [unsigned] [short] [usertype] <noident>drivers/staging/rtl8712/rtl871x_xmit.c:580:36: got restricted __be16 [usertype] <noident>
--- drivers/staging/rtl8712/rtl871x_xmit.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
drivers/staging/rtl8712/rtl871x_xmit.c +4 -3
@@ -340,7 +340,8 @@ sint r8712_update_attrib(struct _adapter/* if in MP_STATE, update pkt_attrib from mp_txcmd, and overwrite * some settings above.*/ if (check_fwstate (pmlmepriv,WIFI_MP_STATE ) == true) - pattrib->priority = (txdesc.txdw1 >>QSEL_SHT ) &0x1f ; + pattrib->priority = + (le32_to_cpu (txdesc.txdw1) >>QSEL_SHT ) &0x1f ;return _SUCCESS; }
@@ -481,7 +482,7 @@ static sint make_wlanhdr(struct _adapterstruct ieee80211_hdr *pwlanhdr = (struct ieee80211_hdr *)hdr;struct mlme_priv *pmlmepriv = &padapter->mlmepriv;struct qos_priv *pqospriv = &pmlmepriv->qospriv; -u16 *fctrl = &pwlanhdr->frame_ctl; +__le16 *fctrl = &pwlanhdr->frame_ctl;memset (hdr,0 ,WLANHDR_OFFSET );SetFrameSubType (fctrl, pattrib->subtype);
@@ -569,7 +570,7 @@ static sint r8712_put_snap(u8 *data, u16 snap->oui[0 ] = oui[0 ]; snap->oui[1 ] = oui[1 ]; snap->oui[2 ] = oui[2 ]; - *(u16 *)(data +SNAP_SIZE ) =htons (h_proto); + *(__be16 *)(data +SNAP_SIZE ) =htons (h_proto);return SNAP_SIZE +sizeof (u16); }
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 3.18.80 release. There are 27 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 Wed Nov 8 11:27:27 UTC 2017. Anything received after that time might be too late.
Build is still ongoing, but here is some early feedback:
Build reference: v3.18.79-28-g8511676
Building arm:allmodconfig ... failed
--------------
Error log:/opt/buildbot/slave/stable-queue-3.18/build/drivers/gpu/drm/msm/msm_gem_submit.c:37:33: error: two or more data types in declaration specifiers
struct msm_gpu *gpu, uint32_t int nr)
Introduced by commit 93f524fe2abb8 ("drm/msm: Fix potential buffer overflow issue"). Looks like a bad backport.
Guenter
Greg Kroah-Hartman
maintainerQuoted 14 lines · Guenter Roeck
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 3.18.80 release. There are 27 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 Wed Nov 8 11:27:27 UTC 2017. Anything received after that time might be too late.
Build is still ongoing, but here is some early feedback:
Build reference: v3.18.79-28-g8511676
Quoted 8 lines
Building arm:allmodconfig ... failed
--------------
Error log:/opt/buildbot/slave/stable-queue-3.18/build/drivers/gpu/drm/msm/msm_gem_submit.c:37:33: error: two or more data types in declaration specifiers
structmsm_gpu*gpu,uint32_tint nr)Introduced by commit
93f524fe2abb8("drm/msm: Fix potential buffer overflow issue"). Looks like a bad backport.
Ugh, you are right, I missed that. I've now fixed this for 4.4 and 3.18 trees, and will push out a new git tree...
thanks,
greg k-h
A message that is not in the archive (sent off-list or not yet received): CALpmF+H7QrgQDWdYCHHMD-kpxCrPVp14T72p51L8gNWfNq2x1g@mail.gmail.com
Greg Kroah-Hartman
maintainerQuoted 3 lines · Harsh Shandilya
Everything fine on arm64 on the msm8996pro board running Android 8.0 . I use a backported drm driver from kernel 4.4 so I skipped the broken drm fix Guenter reported since it didn't apply anyway.
Nice!
thanks for letting me know.
greg k-h
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 3.18.80 release. There are 27 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 Wed Nov 8 11:27:27 UTC 2017. Anything received after that time might be too late.
For v3.18.79-28-gce27944:
Build results:
total: 136 pass: 136 fail: 0 Qemu test results: total: 112 pass: 112 fail: 0
Details are available at http://kerneltests.org/builders.
Guenter
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 3.18.80 release. There are 27 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 Wed Nov 8 11:27:27 UTC 2017. Anything received after that time might be too late.
Quoted 8 lines
For v3.18.79-28-gce27944:
Build results:
total: 136 pass: 136 fail: 0 Qemu test results: total: 112 pass: 112 fail: 0Details are available at http://kerneltests.org/builders.
Great, thanks for testing all of these and letting me know.
greg k-h
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 3.18.80 release. There are 27 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 Wed Nov 8 11:27:27 UTC 2017. 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/v3.x/stable-review/patch-3.18.80-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-3.18.y
and the diffstat can be found below.thanks,
greg k-h
Compiled and booted on my test system. No dmesg and kselftest regressions.
thanks,
-- Shuah