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);

Reply via email to