commit: 3af1312178e3e770e37ad6719847ff525fb02765 Author: Mike Pagano <mpagano <AT> gentoo <DOT> org> AuthorDate: Sun Sep 11 17:39:33 2016 +0000 Commit: Mike Pagano <mpagano <AT> gentoo <DOT> org> CommitDate: Sun Sep 11 17:39:33 2016 +0000 URL: https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=3af13121
Linux patch 3.14.79 0000_README | 4 + 1078_linux-3.14.79.patch | 230 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 234 insertions(+) diff --git a/0000_README b/0000_README index 47a11c5..6e98398 100644 --- a/0000_README +++ b/0000_README @@ -354,6 +354,10 @@ Patch: 1077_linux-3.14.78.patch From: http://www.kernel.org Desc: Linux 3.14.78 +Patch: 1078_linux-3.14.79.patch +From: http://www.kernel.org +Desc: Linux 3.14.79 + Patch: 1500_XATTR_USER_PREFIX.patch From: https://bugs.gentoo.org/show_bug.cgi?id=470644 Desc: Support for namespace user.pax.* on tmpfs. diff --git a/1078_linux-3.14.79.patch b/1078_linux-3.14.79.patch new file mode 100644 index 0000000..4439662 --- /dev/null +++ b/1078_linux-3.14.79.patch @@ -0,0 +1,230 @@ +diff --git a/Makefile b/Makefile +index 74346f0d89c1..0ed6ce300543 100644 +--- a/Makefile ++++ b/Makefile +@@ -1,6 +1,6 @@ + VERSION = 3 + PATCHLEVEL = 14 +-SUBLEVEL = 78 ++SUBLEVEL = 79 + EXTRAVERSION = + NAME = Remembering Coco + +diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c +index a413f76e84d4..1b01adf1d406 100644 +--- a/drivers/hid/hid-input.c ++++ b/drivers/hid/hid-input.c +@@ -1084,7 +1084,7 @@ void hidinput_hid_event(struct hid_device *hid, struct hid_field *field, struct + return; + + /* report the usage code as scancode if the key status has changed */ +- if (usage->type == EV_KEY && !!test_bit(usage->code, input->key) != value) ++ if (usage->type == EV_KEY && (!!test_bit(usage->code, input->key)) != value) + input_event(input, EV_MSC, MSC_SCAN, usage->hid); + + input_event(input, usage->type, usage->code, value); +diff --git a/drivers/media/dvb-frontends/stb6100.c b/drivers/media/dvb-frontends/stb6100.c +index cea175d19890..4ef8a5c7003e 100644 +--- a/drivers/media/dvb-frontends/stb6100.c ++++ b/drivers/media/dvb-frontends/stb6100.c +@@ -193,7 +193,7 @@ static int stb6100_write_reg_range(struct stb6100_state *state, u8 buf[], int st + .len = len + 1 + }; + +- if (1 + len > sizeof(buf)) { ++ if (1 + len > sizeof(cmdbuf)) { + printk(KERN_WARNING + "%s: i2c wr: len=%d is too big!\n", + KBUILD_MODNAME, len); +diff --git a/drivers/net/can/dev.c b/drivers/net/can/dev.c +index fa78e45a2bee..de333c740203 100644 +--- a/drivers/net/can/dev.c ++++ b/drivers/net/can/dev.c +@@ -665,9 +665,6 @@ static int can_changelink(struct net_device *dev, + } + } + +- if (!data) +- return 0; +- + if (data[IFLA_CAN_CTRLMODE]) { + struct can_ctrlmode *cm; + +diff --git a/drivers/s390/char/sclp_ctl.c b/drivers/s390/char/sclp_ctl.c +index 648cb86afd42..ea607a4a1bdd 100644 +--- a/drivers/s390/char/sclp_ctl.c ++++ b/drivers/s390/char/sclp_ctl.c +@@ -56,6 +56,7 @@ static int sclp_ctl_ioctl_sccb(void __user *user_area) + { + struct sclp_ctl_sccb ctl_sccb; + struct sccb_header *sccb; ++ unsigned long copied; + int rc; + + if (copy_from_user(&ctl_sccb, user_area, sizeof(ctl_sccb))) +@@ -65,14 +66,15 @@ static int sclp_ctl_ioctl_sccb(void __user *user_area) + sccb = (void *) get_zeroed_page(GFP_KERNEL | GFP_DMA); + if (!sccb) + return -ENOMEM; +- if (copy_from_user(sccb, u64_to_uptr(ctl_sccb.sccb), sizeof(*sccb))) { ++ copied = PAGE_SIZE - ++ copy_from_user(sccb, u64_to_uptr(ctl_sccb.sccb), PAGE_SIZE); ++ if (offsetof(struct sccb_header, length) + ++ sizeof(sccb->length) > copied || sccb->length > copied) { + rc = -EFAULT; + goto out_free; + } +- if (sccb->length > PAGE_SIZE || sccb->length < 8) +- return -EINVAL; +- if (copy_from_user(sccb, u64_to_uptr(ctl_sccb.sccb), sccb->length)) { +- rc = -EFAULT; ++ if (sccb->length < 8) { ++ rc = -EINVAL; + goto out_free; + } + rc = sclp_sync_request(ctl_sccb.cmdw, sccb); +diff --git a/drivers/scsi/be2iscsi/be_main.c b/drivers/scsi/be2iscsi/be_main.c +index f4b9ac4ef16e..872ca84b3789 100644 +--- a/drivers/scsi/be2iscsi/be_main.c ++++ b/drivers/scsi/be2iscsi/be_main.c +@@ -3172,7 +3172,7 @@ be_sgl_create_contiguous(void *virtual_address, + { + WARN_ON(!virtual_address); + WARN_ON(!physical_address); +- WARN_ON(!length > 0); ++ WARN_ON(!length); + WARN_ON(!sgl); + + sgl->va = virtual_address; +diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c +index 457b88481db0..3312ae622284 100644 +--- a/drivers/staging/comedi/drivers/ni_mio_common.c ++++ b/drivers/staging/comedi/drivers/ni_mio_common.c +@@ -4404,7 +4404,7 @@ static int ni_E_init(struct comedi_device *dev) + else + s->maxdata = 0xffffff; + s->insn_read = ni_tio_insn_read; +- s->insn_write = ni_tio_insn_read; ++ s->insn_write = ni_tio_insn_write; + s->insn_config = ni_tio_insn_config; + #ifdef PCIDMA + s->subdev_flags |= SDF_CMD_READ /* | SDF_CMD_WRITE */; +diff --git a/fs/dcache.c b/fs/dcache.c +index 47c06888dc05..4d170433c647 100644 +--- a/fs/dcache.c ++++ b/fs/dcache.c +@@ -2652,6 +2652,7 @@ static void __d_materialise_dentry(struct dentry *dentry, struct dentry *anon) + switch_names(dentry, anon); + swap(dentry->d_name.hash, anon->d_name.hash); + ++ dentry->d_flags |= DCACHE_RCUACCESS; + dentry->d_parent = dentry; + list_del_init(&dentry->d_child); + anon->d_parent = dparent; +diff --git a/fs/ext4/super.c b/fs/ext4/super.c +index 4ce824197b81..712f84308bc8 100644 +--- a/fs/ext4/super.c ++++ b/fs/ext4/super.c +@@ -2071,6 +2071,7 @@ void ext4_group_desc_csum_set(struct super_block *sb, __u32 block_group, + + /* Called at mount-time, super-block is locked */ + static int ext4_check_descriptors(struct super_block *sb, ++ ext4_fsblk_t sb_block, + ext4_group_t *first_not_zeroed) + { + struct ext4_sb_info *sbi = EXT4_SB(sb); +@@ -2101,6 +2102,11 @@ static int ext4_check_descriptors(struct super_block *sb, + grp = i; + + block_bitmap = ext4_block_bitmap(sb, gdp); ++ if (block_bitmap == sb_block) { ++ ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: " ++ "Block bitmap for group %u overlaps " ++ "superblock", i); ++ } + if (block_bitmap < first_block || block_bitmap > last_block) { + ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: " + "Block bitmap for group %u not in group " +@@ -2108,6 +2114,11 @@ static int ext4_check_descriptors(struct super_block *sb, + return 0; + } + inode_bitmap = ext4_inode_bitmap(sb, gdp); ++ if (inode_bitmap == sb_block) { ++ ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: " ++ "Inode bitmap for group %u overlaps " ++ "superblock", i); ++ } + if (inode_bitmap < first_block || inode_bitmap > last_block) { + ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: " + "Inode bitmap for group %u not in group " +@@ -2115,6 +2126,11 @@ static int ext4_check_descriptors(struct super_block *sb, + return 0; + } + inode_table = ext4_inode_table(sb, gdp); ++ if (inode_table == sb_block) { ++ ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: " ++ "Inode table for group %u overlaps " ++ "superblock", i); ++ } + if (inode_table < first_block || + inode_table + sbi->s_itb_per_group - 1 > last_block) { + ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: " +@@ -3869,7 +3885,7 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent) + goto failed_mount2; + } + } +- if (!ext4_check_descriptors(sb, &first_not_zeroed)) { ++ if (!ext4_check_descriptors(sb, logical_sb_block, &first_not_zeroed)) { + ext4_msg(sb, KERN_ERR, "group descriptors corrupted!"); + goto failed_mount2; + } +diff --git a/mm/memory.c b/mm/memory.c +index e9ddc7aceefa..43d45c9f7bf5 100644 +--- a/mm/memory.c ++++ b/mm/memory.c +@@ -3770,8 +3770,18 @@ static int __handle_mm_fault(struct mm_struct *mm, struct vm_area_struct *vma, + if (unlikely(pmd_none(*pmd)) && + unlikely(__pte_alloc(mm, vma, pmd, address))) + return VM_FAULT_OOM; +- /* if an huge pmd materialized from under us just retry later */ +- if (unlikely(pmd_trans_huge(*pmd))) ++ /* ++ * If a huge pmd materialized under us just retry later. Use ++ * pmd_trans_unstable() instead of pmd_trans_huge() to ensure the pmd ++ * didn't become pmd_trans_huge under us and then back to pmd_none, as ++ * a result of MADV_DONTNEED running immediately after a huge pmd fault ++ * in a different thread of this mm, in turn leading to a misleading ++ * pmd_trans_huge() retval. All we have to ensure is that it is a ++ * regular pmd that we can walk with pte_offset_map() and we can do that ++ * through an atomic read in C, which is what pmd_trans_unstable() ++ * provides. ++ */ ++ if (unlikely(pmd_trans_unstable(pmd))) + return 0; + /* + * A regular pmd is established and it can't morph into a huge pmd +diff --git a/net/rds/recv.c b/net/rds/recv.c +index bd82522534fc..f6839107d020 100644 +--- a/net/rds/recv.c ++++ b/net/rds/recv.c +@@ -543,5 +543,7 @@ void rds_inc_info_copy(struct rds_incoming *inc, + minfo.fport = inc->i_hdr.h_dport; + } + ++ minfo.flags = 0; ++ + rds_info_copy(iter, &minfo, sizeof(minfo)); + } +diff --git a/sound/pci/oxygen/oxygen_mixer.c b/sound/pci/oxygen/oxygen_mixer.c +index 5988e044c519..259bf54a9df0 100644 +--- a/sound/pci/oxygen/oxygen_mixer.c ++++ b/sound/pci/oxygen/oxygen_mixer.c +@@ -88,7 +88,7 @@ static int dac_mute_put(struct snd_kcontrol *ctl, + int changed; + + mutex_lock(&chip->mutex); +- changed = !value->value.integer.value[0] != chip->dac_mute; ++ changed = (!value->value.integer.value[0]) != chip->dac_mute; + if (changed) { + chip->dac_mute = !value->value.integer.value[0]; + chip->model.update_dac_mute(chip);
