Linux 4.4.250
Greg Kroah-Hartman
maintainerI'm announcing the release of the 4.4.250 kernel.
All users of the 4.4 kernel series must upgrade.
The updated 4.4.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-4.4.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 - arch/powerpc/sysdev/mpic_msgr.c | 2 - drivers/iio/magnetometer/mag3110.c | 13 ++++++--- drivers/media/usb/dvb-usb/gp8psk.c | 2 - drivers/misc/vmw_vmci/vmci_context.c | 2 - drivers/net/wireless/mwifiex/join.c | 2 + drivers/s390/block/dasd_alias.c | 10 ++++++- drivers/usb/serial/digi_acceleport.c | 45 +++++++++----------------------- fs/quota/quota_tree.c | 8 ++--- fs/reiserfs/stree.c | 6 ++++ include/linux/of.h | 1 include/uapi/linux/const.h | 5 +++ include/uapi/linux/lightnvm.h | 2 - include/uapi/linux/netfilter/x_tables.h | 2 - include/uapi/linux/netlink.h | 2 - include/uapi/linux/sysctl.h | 2 - kernel/module.c | 6 ++-- sound/core/seq/seq_queue.h | 8 ++--- sound/pci/hda/patch_ca0132.c | 16 +++++++++-- sound/pci/hda/patch_realtek.c | 25 +++++++++++++++-- sound/usb/pcm.c | 38 +++++++++++---------------- 21 files changed, 117 insertions(+), 82 deletions(-)
Alberto Aguirre (1):
ALSA: usb-audio: simplify set_sync_ep_implicit_fb_quirk
Anant Thazhemadam (1):
misc: vmw_vmci: fix kernel info-leak by initializing dbells in vmci_ctx_get_chkpt_doorbells()
Greg Kroah-Hartman (1):
Linux 4.4.250
Hui Wang (1):
ALSA: hda - Fix a wrong FIXUP for alc289 on Dell machines
Jan Kara (1):
quota: Don't overflow quota file offsets
Jessica Yu (1):
module: delay kobject uevent until after module init call
Johan Hovold (3):
ALSA: usb-audio: fix sync-ep altsetting sanity check
USB: serial: digi_acceleport: fix write-wakeup deadlocks
of: fix linker-section match-table corruption
Jonathan Cameron (1):
iio:magnetometer:mag3110: Fix alignment and data leak issues.
Kailang Yang (2):
ALSA: hda/realtek - Support Dell headset mode for ALC3271
ALSA: hda/realtek - Dell headphone has noise on unmute for ALC236
Mauro Carvalho Chehab (1):
media: gp8psk: initialize stats at power control logic
Miroslav Benes (1):
module: set MODULE_STATE_GOING state when a module fails to load
Petr Vorel (1):
uapi: move constants from <linux/kernel.h> to <linux/const.h>
Qinglang Miao (1):
powerpc: sysdev: add missing iounmap() on error in mpic_msgr_probe()
Rustam Kovhaev (1):
reiserfs: add check for an invalid ih_entry_count
Stefan Haberland (1):
s390/dasd: fix hanging device offline processing
Takashi Iwai (2):
ALSA: hda/ca0132 - Fix work handling in delayed HP detection
ALSA: seq: Use bool for snd_seq_queue internal flags
Zhang Xiaohui (1):
mwifiex: Fix possible buffer overflows in mwifiex_cmd_802_11_ad_hoc_start
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,6 +1,6 @@ VERSION = 4 PATCHLEVEL = 4 -SUBLEVEL = 249 +SUBLEVEL = 250 EXTRAVERSION = NAME = Blurry Fish Butt
arch/powerpc/sysdev/mpic_msgr.c +1 -1
@@ -196,7 +196,7 @@ static int mpic_msgr_probe(struct platform_device *dev)/* IO map the message register block. */ of_address_to_resource (np,0 , &rsrc); - msgr_block_addr =ioremap (rsrc.start,resource_size (&rsrc)); + msgr_block_addr =devm_ioremap (&dev->dev, rsrc.start,resource_size (&rsrc));if (!msgr_block_addr) {dev_err (&dev->dev,"Failed to iomap MPIC message registers" );return -EFAULT ;
drivers/iio/magnetometer/mag3110.c +9 -4
@@ -52,6 +52,12 @@ struct mag3110_data {struct i2c_client *client;struct mutex lock;u8 ctrl_reg1; +/* Ensure natural alignment of timestamp */ +struct { +__be16 channels[3 ]; +u8 temperature; +s64 ts__aligned(8) ; + } scan; };static int mag3110_request (struct mag3110_data *data)
@@ -245,10 +251,9 @@ static irqreturn_t mag3110_trigger_handler(int irq, void *p)struct iio_poll_func *pf = p;struct iio_dev *indio_dev = pf->indio_dev;struct mag3110_data *data =iio_priv (indio_dev); -u8 buffer[16 ];/* 3 16-bit channels + 1 byte temp + padding + ts */ int ret; - ret =mag3110_read (data, (__be16 *) buffer); + ret =mag3110_read (data, data->scan.channels);if (ret <0 ) goto done;
@@ -257,10 +262,10 @@ static irqreturn_t mag3110_trigger_handler(int irq, void *p) MAG3110_DIE_TEMP);if (ret <0 ) goto done; - buffer[6 ] = ret; + data->scan.temperature = ret; } -iio_push_to_buffers_with_timestamp (indio_dev, buffer, +iio_push_to_buffers_with_timestamp (indio_dev, &data->scan,iio_get_time_ns ()); done:
drivers/media/usb/dvb-usb/gp8psk.c +1 -1
@@ -163,7 +163,7 @@ out_rel_fw:static int gp8psk_power_ctrl (struct dvb_usb_device *d,int onoff) { -u8 status, buf; +u8 status =0 , buf;int gp_product_id =le16_to_cpu (d->udev->descriptor.idProduct);if (onoff) {
drivers/misc/vmw_vmci/vmci_context.c +1 -1
@@ -750,7 +750,7 @@ static int vmci_ctx_get_chkpt_doorbells(struct vmci_ctx *context,return VMCI_ERROR_MORE_DATA ; } - dbells =kmalloc (data_size,GFP_ATOMIC ); + dbells =kzalloc (data_size,GFP_ATOMIC );if (!dbells)return VMCI_ERROR_NO_MEM ;
drivers/net/wireless/mwifiex/join.c +2 -0
@@ -856,6 +856,8 @@ mwifiex_cmd_802_11_ad_hoc_start(struct mwifiex_private *priv,memset (adhoc_start->ssid,0 ,IEEE80211_MAX_SSID_LEN ); +if (req_ssid->ssid_len >IEEE80211_MAX_SSID_LEN ) + req_ssid->ssid_len =IEEE80211_MAX_SSID_LEN ;memcpy (adhoc_start->ssid, req_ssid->ssid, req_ssid->ssid_len); mwifiex_dbg(adapter, INFO, "info: ADHOC_S_CMD: SSID = %s\n",
drivers/s390/block/dasd_alias.c +9 -1
@@ -475,11 +475,19 @@ static int read_unit_address_configuration(struct dasd_device *device,spin_unlock_irqrestore (&lcu->lock, flags); rc =dasd_sleep_on (cqr); -if (rc && !suborder_not_supported (cqr)) { +if (!rc) + goto out; + +if (suborder_not_supported (cqr)) { +/* suborder not supported or device unusable for IO */ + rc = -EOPNOTSUPP ; + }else { +/* IO failed but should be retried */ spin_lock_irqsave (&lcu->lock, flags); lcu->flags |=NEED_UAC_UPDATE ;spin_unlock_irqrestore (&lcu->lock, flags); } +out:dasd_kfree_request (cqr, cqr->memdev);return rc; }
drivers/usb/serial/digi_acceleport.c +13 -32
117 lines not on this page · raw message
fs/quota/quota_tree.c +4 -4
@@ -55,7 +55,7 @@ static ssize_t read_blk(struct qtree_mem_dqinfo *info, uint blk, char *buf)memset (buf,0 , info->dqi_usable_bs);return sb->s_op->quota_read (sb, info->dqi_type, buf, - info->dqi_usable_bs, blk << info->dqi_blocksize_bits); + info->dqi_usable_bs, (loff_t )blk << info->dqi_blocksize_bits); }static ssize_t write_blk (struct qtree_mem_dqinfo *info,uint blk,char *buf)
@@ -64,7 +64,7 @@ static ssize_t write_blk(struct qtree_mem_dqinfo *info, uint blk, char *buf)ssize_t ret; ret = sb->s_op->quota_write (sb, info->dqi_type, buf, - info->dqi_usable_bs, blk << info->dqi_blocksize_bits); + info->dqi_usable_bs, (loff_t )blk << info->dqi_blocksize_bits);if (ret != info->dqi_usable_bs) {quota_error (sb,"dquota write failed" );if (ret >=0 )
@@ -277,7 +277,7 @@ static uint find_free_dqentry(struct qtree_mem_dqinfo *info, blk); goto out_buf; } - dquot->dq_off = (blk << info->dqi_blocksize_bits) + + dquot->dq_off = ((loff_t )blk << info->dqi_blocksize_bits) +sizeof (struct qt_disk_dqdbheader ) + i * info->dqi_entry_size;kfree (buf);
@@ -552,7 +552,7 @@ static loff_t find_block_dqentry(struct qtree_mem_dqinfo *info, ret = -EIO ; goto out_buf; }else { - ret = (blk << info->dqi_blocksize_bits) +sizeof (struct + ret = ((loff_t )blk << info->dqi_blocksize_bits) +sizeof (struct qt_disk_dqdbheader ) + i * info->dqi_entry_size; } out_buf:
fs/reiserfs/stree.c +6 -0
@@ -453,6 +453,12 @@ static int is_leaf(char *buf, int blocksize, struct buffer_head *bh) "(second one): %h", ih);return 0 ; } +if (is_direntry_le_ih (ih) && (ih_item_len (ih) < (ih_entry_count (ih) *IH_SIZE ))) { +reiserfs_warning (NULL ,"reiserfs-5093" , +"item entry count seems wrong %h" , + ih); +return 0 ; + } prev_location =ih_location (ih); }
include/linux/of.h +1 -0
@@ -941,6 +941,7 @@ static inline int of_get_available_child_count(const struct device_node *np)#define _OF_DECLARE (table, name, compat, fn, fn_type) \ static const struct of_device_id __of_table_##name \ __used __section(__##table##_of_table) \ + __aligned(__alignof__(struct of_device_id)) \ = { .compatible = compat, \ .data = (fn == (fn_type)NULL) ? fn : fn }#else
include/uapi/linux/const.h +5 -0
@@ -24,4 +24,9 @@#define _BITUL (x) (_AC(1,UL) << (x))#define _BITULL (x) (_AC(1,ULL) << (x)) +#define __ALIGN_KERNEL (x, a) __ALIGN_KERNEL_MASK(x, (typeof(x))(a) - 1) +#define __ALIGN_KERNEL_MASK (x, mask) (((x) + (mask)) & ~(mask)) + +#define __KERNEL_DIV_ROUND_UP (n, d) (((n) + (d) - 1) / (d)) +#endif /* !(_LINUX_CONST_H) */
include/uapi/linux/lightnvm.h +1 -1
@@ -20,7 +20,7 @@#define _UAPI_LINUX_LIGHTNVM_H#ifdef __KERNEL__ -#include <linux/kernel.h> +#include <linux/const.h> #include <linux/ioctl.h> #else /* __KERNEL__ */ #include <stdio.h>
include/uapi/linux/netfilter/x_tables.h +1 -1
@@ -1,6 +1,6 @@#ifndef _UAPI_X_TABLES_H#define _UAPI_X_TABLES_H -#include <linux/kernel.h> +#include <linux/const.h> #include <linux/types.h> #define XT_FUNCTION_MAXNAMELEN 30
include/uapi/linux/netlink.h +1 -1
@@ -1,7 +1,7 @@#ifndef _UAPI__LINUX_NETLINK_H#define _UAPI__LINUX_NETLINK_H -#include <linux/kernel.h> +#include <linux/const.h> #include <linux/socket.h> /* for __kernel_sa_family_t */ #include <linux/types.h>
include/uapi/linux/sysctl.h +1 -1
@@ -22,7 +22,7 @@#ifndef _UAPI_LINUX_SYSCTL_H#define _UAPI_LINUX_SYSCTL_H -#include <linux/kernel.h> +#include <linux/const.h> #include <linux/types.h> #include <linux/compiler.h>
kernel/module.c +4 -2
@@ -1779,7 +1779,6 @@ static int mod_sysfs_init(struct module *mod)if (err)mod_kobject_put (mod); -/* delay uevent until full sysfs population */ out:return err; }
@@ -1813,7 +1812,6 @@ static int mod_sysfs_setup(struct module *mod,add_sect_attrs (mod, info);add_notes_attrs (mod, info); -kobject_uevent (&mod->mkobj.kobj,KOBJ_ADD );return 0 ; out_unreg_param:
@@ -3301,6 +3299,9 @@ static noinline int do_init_module(struct module *mod)blocking_notifier_call_chain (&module_notify_list,MODULE_STATE_LIVE , mod); +/* Delay uevent until module has finished its init routine */ +kobject_uevent (&mod->mkobj.kobj,KOBJ_ADD ); +/* * We need to finish all async code before the module init sequence * is done. This has potential to deadlock. For example, a newly
@@ -3589,6 +3590,7 @@ static int load_module(struct load_info *info, const char __user *uargs,return do_init_module (mod); bug_cleanup: + mod->state =MODULE_STATE_GOING ;/* module_bug_cleanup needs module_mutex protection */ mutex_lock (&module_mutex);module_bug_cleanup (mod);
sound/core/seq/seq_queue.h +4 -4
@@ -40,10 +40,10 @@ struct snd_seq_queue {struct snd_seq_timer *timer;/* time keeper for this queue */ int owner;/* client that 'owns' the timer */ - unsigned int locked:1, /* timer is only accesibble by owner if set */ - klocked:1, /* kernel lock (after START) */ - check_again:1, - check_blocked:1; +bool locked;/* timer is only accesibble by owner if set */ +bool klocked;/* kernel lock (after START) */ +bool check_again;/* concurrent access happened during check */ +bool check_blocked;/* queue being checked */ unsigned int flags;/* status flags */ unsigned int info_flags;/* info for sync */
sound/pci/hda/patch_ca0132.c +14 -2
@@ -4443,11 +4443,10 @@ static void hp_callback(struct hda_codec *codec, struct hda_jack_callback *cb)/* Delay enabling the HP amp, to let the mic-detection * state machine run. */ -cancel_delayed_work (&spec->unsol_hp_work); -schedule_delayed_work (&spec->unsol_hp_work,msecs_to_jiffies (500 )); tbl =snd_hda_jack_tbl_get (codec, cb->nid);if (tbl) tbl->block_report =1 ; +schedule_delayed_work (&spec->unsol_hp_work,msecs_to_jiffies (500 )); }static void amic_callback (struct hda_codec *codec,struct hda_jack_callback *cb)
@@ -4625,12 +4624,25 @@ static void ca0132_free(struct hda_codec *codec)kfree (codec->spec); } +#ifdef CONFIG_PM +static int ca0132_suspend (struct hda_codec *codec) +{ +struct ca0132_spec *spec = codec->spec; + +cancel_delayed_work_sync (&spec->unsol_hp_work); +return 0 ; +} +#endif +static struct hda_codec_ops ca0132_patch_ops = { .build_controls = ca0132_build_controls, .build_pcms = ca0132_build_pcms, .init = ca0132_init, .free = ca0132_free, .unsol_event = snd_hda_jack_unsol_event, +#ifdef CONFIG_PM + .suspend = ca0132_suspend, +#endif };static void ca0132_config (struct hda_codec *codec)
sound/pci/hda/patch_realtek.c +22 -3
@@ -330,9 +330,7 @@ static void alc_fill_eapd_coef(struct hda_codec *codec)case 0x10ec0225 :case 0x10ec0233 :case 0x10ec0235 : -case 0x10ec0236 :case 0x10ec0255 : -case 0x10ec0256 :case 0x10ec0282 :case 0x10ec0283 :case 0x10ec0286 :
@@ -342,6 +340,11 @@ static void alc_fill_eapd_coef(struct hda_codec *codec)case 0x10ec0299 :alc_update_coef_idx (codec,0x10 ,1 <<9 ,0 );break ; +case 0x10ec0236 : +case 0x10ec0256 : +alc_write_coef_idx (codec,0x36 ,0x5757 ); +alc_update_coef_idx (codec,0x10 ,1 <<9 ,0 ); +break ;case 0x10ec0285 :case 0x10ec0293 :alc_update_coef_idx (codec,0xa ,1 <<13 ,0 );
@@ -4848,6 +4851,7 @@ enum {ALC269_FIXUP_DELL1_MIC_NO_PRESENCE ,ALC269_FIXUP_DELL2_MIC_NO_PRESENCE ,ALC269_FIXUP_DELL3_MIC_NO_PRESENCE , +ALC269_FIXUP_DELL4_MIC_NO_PRESENCE ,ALC269_FIXUP_HEADSET_MODE ,ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC , ALC269_FIXUP_ASPIRE_HEADSET_MIC,
@@ -5150,6 +5154,16 @@ static const struct hda_fixup alc269_fixups[] = { .chained = true, .chain_id =ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC }, + [ALC269_FIXUP_DELL4_MIC_NO_PRESENCE] = { + .type = HDA_FIXUP_PINS, + .v.pins = (const struct hda_pintbl []) { + {0x19 ,0x01a1913c },/* use as headset mic, without its own jack detect */ + {0x1b ,0x01a1913d },/* use as headphone mic, without its own jack detect */ + { } + }, + .chained = true, + .chain_id =ALC269_FIXUP_HEADSET_MODE + }, [ALC269_FIXUP_HEADSET_MODE] = { .type = HDA_FIXUP_FUNC, .v.func = alc_fixup_headset_mode,
@@ -6110,7 +6124,7 @@ static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = { {0x12, 0x90a60120}, {0x14, 0x90170110}, {0x21, 0x0321101f}), -SND_HDA_PIN_QUIRK (0x10ec0289 ,0x1028 ,"Dell" ,ALC225_FIXUP_DELL1_MIC_NO_PRESENCE , +SND_HDA_PIN_QUIRK (0x10ec0289 ,0x1028 ,"Dell" ,ALC269_FIXUP_DELL4_MIC_NO_PRESENCE , {0x12, 0xb7a60130}, {0x14, 0x90170110}, {0x21, 0x04211020}),
@@ -6194,6 +6208,11 @@ static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = { {0x17, 0x90170110}, {0x1a, 0x03011020}, {0x21, 0x03211030}), +SND_HDA_PIN_QUIRK (0x10ec0299 ,0x1028 ,"Dell" ,ALC269_FIXUP_DELL4_MIC_NO_PRESENCE , +ALC225_STANDARD_PINS , + {0x12, 0xb7a60130}, + {0x13, 0xb8a60140}, + {0x17, 0x90170110}), {} };
sound/usb/pcm.c +16 -22
@@ -324,6 +324,7 @@ static int set_sync_ep_implicit_fb_quirk(struct snd_usb_substream *subs,struct usb_host_interface *alts;struct usb_interface *iface;unsigned int ep; +unsigned int ifnum;/* Implicit feedback sync EPs consumers are always playback EPs */ if (subs->direction !=SNDRV_PCM_STREAM_PLAYBACK )
@@ -334,34 +335,19 @@ static int set_sync_ep_implicit_fb_quirk(struct snd_usb_substream *subs,case USB_ID (0x0763 ,0x2031 ):/* M-Audio Fast Track C600 */ case USB_ID (0x22f0 ,0x0006 ):/* Allen&Heath Qu-16 */ ep =0x81 ; - iface =usb_ifnum_to_if (dev,3 ); - -if (!iface || iface->num_altsetting ==0 ) -return -EINVAL ; - - alts = &iface->altsetting[1 ]; - goto add_sync_ep; -break ; + ifnum =3 ; + goto add_sync_ep_from_ifnum;case USB_ID (0x0763 ,0x2080 ):/* M-Audio FastTrack Ultra */ case USB_ID (0x0763 ,0x2081 ): ep =0x81 ; - iface =usb_ifnum_to_if (dev,2 ); - -if (!iface || iface->num_altsetting ==0 ) -return -EINVAL ; - - alts = &iface->altsetting[1 ]; - goto add_sync_ep; + ifnum =2 ; + goto add_sync_ep_from_ifnum;case USB_ID (0x1397 ,0x0002 ): ep =0x81 ; - iface =usb_ifnum_to_if (dev,1 ); - -if (!iface || iface->num_altsetting ==0 ) -return -EINVAL ; - - alts = &iface->altsetting[1 ]; - goto add_sync_ep; + ifnum =1 ; + goto add_sync_ep_from_ifnum; } + if (attr == USB_ENDPOINT_SYNC_ASYNC && altsd->bInterfaceClass == USB_CLASS_VENDOR_SPEC && altsd->bInterfaceProtocol == 2 &&
@@ -376,6 +362,14 @@ static int set_sync_ep_implicit_fb_quirk(struct snd_usb_substream *subs,/* No quirk */ return 0 ; +add_sync_ep_from_ifnum: + iface =usb_ifnum_to_if (dev, ifnum); + +if (!iface || iface->num_altsetting <2 ) +return -EINVAL ; + + alts = &iface->altsetting[1 ]; + add_sync_ep: subs->sync_endpoint = snd_usb_add_endpoint(subs->stream->chip, alts, ep, !subs->direction,