Linux 3.18.78
Greg KH
maintainerI'm announcing the release of the 3.18.78 kernel.
All users of the 3.18 kernel series must upgrade.
The updated 3.18.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-3.18.y
and can be browsed at the normal kernel.org git web browser:
http://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 arch/parisc/kernel/syscall.S | 55 ++--- drivers/bus/mvebu-mbus.c | 2 drivers/i2c/busses/i2c-ismt.c | 5 drivers/net/can/usb/esd_usb2.c | 2 drivers/net/can/usb/gs_usb.c | 10 - drivers/net/wireless/brcm80211/brcmsmac/phy/phy_n.c | 197 +++++++++----------- drivers/usb/class/cdc-acm.c | 3 drivers/usb/core/config.c | 6 drivers/usb/core/devio.c | 6 drivers/usb/core/hub.c | 11 - drivers/usb/core/quirks.c | 4 drivers/usb/serial/metro-usb.c | 1 fs/fscache/object-list.c | 7 include/linux/mbus.h | 4 lib/digsig.c | 6 net/packet/af_packet.c | 10 - net/sched/cls_api.c | 7 security/keys/encrypted-keys/encrypted.c | 7 security/keys/key.c | 10 + sound/core/seq/seq_lock.c | 4 sound/core/seq/seq_lock.h | 12 - sound/pci/hda/hda_codec.c | 2 23 files changed, 197 insertions(+), 176 deletions(-)
Alan Stern (1):
USB: core: fix out-of-bounds access bug in usb_get_bos_descriptor()
Alexander Drozdov (1):
af_packet: don't pass empty blocks for PACKET_V3
Arnd Bergmann (1):
brcmsmac: make some local variables 'static const' to reduce stack size
Ben Hutchings (1):
ALSA: seq: Enable 'use' locking in all configurations
David Howells (1):
KEYS: don't let add_key() update an uninstantiated key
Eric Biggers (3):
KEYS: encrypted: fix dereference of NULL user_key_payload lib/digsig: fix dereference of NULL user_key_payload
FS-Cache: fix dereference of NULL user_key_payload
Felipe Balbi (1):
usb: quirks: add quirk for WORLDE MINI MIDI keyboard
Greg Kroah-Hartman (1):
Linux 3.18.78
Hans de Goede (1):
USB: devio: Revert "USB: devio: Don't corrupt user memory"
Ignacy Gawędzki (1):
cls_api.c: Fix dumping of non-existing actions' stats.
Jan Luebbe (1):
bus: mbus: fix window size calculation for 4GB windows
Johan Hovold (1):
USB: serial: metro-usb: add MS7820 device id
John David Anglin (2):
parisc: Avoid trashing sr2 and sr3 in LWS code
parisc: Fix double-word compare and exchange in LWS code on 32-bit kernels
Maksim Salau (1):
usb: cdc_acm: Add quirk for Elatec TWN3
Mathias Nyman (1):
usb: hub: Allow reset retry for USB2 devices on connect bounce
Pontus Andersson (1):
i2c: ismt: Separate I2C block read from SMBus block read
Stefan Mätje (1):
can: esd_usb2: Fix can_dlc value for received RTR, frames
Takashi Iwai (1):
ALSA: hda: Remove superfluous '-' added by printk conversion
Wolfgang Grandegger (1):
can: gs_usb: fix busy loop if no more TX context is available
Greg KH
maintainerMakefile +1 -1
@@ -1,6 +1,6 @@ VERSION = 3 PATCHLEVEL = 18 -SUBLEVEL = 77 +SUBLEVEL = 78 EXTRAVERSION = NAME = Diseased Newt
arch/parisc/kernel/syscall.S +25 -30
138 lines not on this page · raw message
drivers/bus/mvebu-mbus.c +1 -1
@@ -523,7 +523,7 @@ mvebu_mbus_default_setup_cpu_target(struct mvebu_mbus_state *mbus)if (mbus->hw_io_coherency) w->mbus_attr |=ATTR_HW_COHERENCY ; w->base = base &DDR_BASE_CS_LOW_MASK ; - w->size = (size | ~DDR_SIZE_MASK ) +1 ; + w->size = (u64)(size | ~DDR_SIZE_MASK ) +1 ; } } mvebu_mbus_dram_info.num_cs = cs;
drivers/i2c/busses/i2c-ismt.c +4 -1
@@ -339,12 +339,15 @@ static int ismt_process_desc(const struct ismt_desc *desc, data->word = dma_buffer[0 ] | (dma_buffer[1 ] <<8 );break ;case I2C_SMBUS_BLOCK_DATA : -case I2C_SMBUS_I2C_BLOCK_DATA :if (desc->rxbytes != dma_buffer[0 ] +1 )return -EMSGSIZE ;memcpy (data->block, dma_buffer, desc->rxbytes);break ; +case I2C_SMBUS_I2C_BLOCK_DATA : +memcpy (&data->block[1 ], dma_buffer, desc->rxbytes); + data->block[0 ] = desc->rxbytes; +break ; }return 0 ; }
drivers/net/can/usb/esd_usb2.c +1 -1
@@ -334,7 +334,7 @@ static void esd_usb2_rx_can_msg(struct esd_usb2_net_priv *priv, } cf->can_id = id &ESD_IDMASK ; - cf->can_dlc =get_can_dlc (msg->msg.rx.dlc); + cf->can_dlc =get_can_dlc (msg->msg.rx.dlc & ~ESD_RTR );if (id &ESD_EXTID ) cf->can_id |=CAN_EFF_FLAG ;
drivers/net/can/usb/gs_usb.c +2 -8
@@ -356,6 +356,8 @@ static void gs_usb_recieve_bulk_callback(struct urb *urb)gs_free_tx_context (txc); +atomic_dec (&dev->active_tx_urbs); +netif_wake_queue (netdev); }
@@ -444,14 +446,6 @@ static void gs_usb_xmit_callback(struct urb *urb) urb->transfer_buffer_length, urb->transfer_buffer, urb->transfer_dma); - -atomic_dec (&dev->active_tx_urbs); - -if (!netif_device_present (netdev)) -return ; - -if (netif_queue_stopped (netdev)) -netif_wake_queue (netdev); }static netdev_tx_t gs_can_start_xmit (struct sk_buff *skb,struct net_device *netdev)
drivers/net/wireless/brcm80211/brcmsmac/phy/phy_n.c +97 -100
374 lines not on this page · raw message
drivers/usb/class/cdc-acm.c +3 -0
@@ -1779,6 +1779,9 @@ static const struct usb_device_id acm_ids[] = { { USB_DEVICE(0xfff0, 0x0100), /* DATECS FP-2000 */ .driver_info =NO_UNION_NORMAL ,/* reports zero length descriptor */ }, + { USB_DEVICE(0x09d8, 0x0320), /* Elatec GmbH TWN3 */ + .driver_info = NO_UNION_NORMAL, /* has misplaced union descriptor */ + }, { USB_DEVICE(0x2912, 0x0001), /* ATOL FPrint */ .driver_info = CLEAR_HALT_CONDITIONS,
drivers/usb/core/config.c +4 -2
@@ -855,10 +855,12 @@ int usb_get_bos_descriptor(struct usb_device *dev)for (i =0 ; i < num; i++) { buffer += length; cap = (struct usb_dev_cap_header *)buffer; - length = cap->bLength; -if (total_len < length) +if (total_len <sizeof (*cap) || total_len < cap->bLength) { + dev->bos->desc->bNumDeviceCaps = i;break ; + } + length = cap->bLength; total_len -= length;if (cap->bDescriptorType !=USB_DT_DEVICE_CAPABILITY ) {
drivers/usb/core/devio.c +1 -5
@@ -1413,11 +1413,7 @@ static int proc_do_submiturb(struct usb_dev_state *ps, struct usbdevfs_urb *uurb totlen += isopkt[u].length; } u *=sizeof (struct usb_iso_packet_descriptor ); -if (totlen <= uurb->buffer_length) - uurb->buffer_length = totlen; -else -WARN_ONCE (1 ,"uurb->buffer_length is too short %d vs %d" , - totlen, uurb->buffer_length); + uurb->buffer_length = totlen;break ;default :
drivers/usb/core/hub.c +7 -4
@@ -2667,13 +2667,16 @@ static int hub_port_wait_reset(struct usb_hub *hub, int port1,if (!(portstatus &USB_PORT_STAT_CONNECTION ))return -ENOTCONN ; -/* bomb out completely if the connection bounced. A USB 3.0 -* connection may bounce if multiple warm resets were issued, +/* Retry if connect change is set but status is still connected. +* A USB 3.0 connection may bounce if multiple warm resets were issued, * but the device may have successfully re-connected. Ignore it. */ if (!hub_is_superspeed (hub->hdev) && - (portchange &USB_PORT_STAT_C_CONNECTION )) -return -ENOTCONN ; + (portchange &USB_PORT_STAT_C_CONNECTION )) { +usb_clear_port_feature (hub->hdev, port1, +USB_PORT_FEAT_C_CONNECTION ); +return -EAGAIN ; + }if (!(portstatus &USB_PORT_STAT_ENABLE ))return -EBUSY ;
drivers/usb/core/quirks.c +4 -0
@@ -214,6 +214,10 @@ static const struct usb_device_id usb_quirk_list[] = {/* Corsair Strafe RGB */ { USB_DEVICE(0x1b1c, 0x1b20), .driver_info = USB_QUIRK_DELAY_INIT }, + /* MIDI keyboard WORLDE MINI */ + { USB_DEVICE(0x1c75, 0x0204), .driver_info = + USB_QUIRK_CONFIG_INTF_STRINGS }, + /* Acer C120 LED Projector */ { USB_DEVICE(0x1de1, 0xc102), .driver_info = USB_QUIRK_NO_LPM },
drivers/usb/serial/metro-usb.c +1 -0
@@ -45,6 +45,7 @@ struct metrousb_private {static const struct usb_device_id id_table[] = { {USB_DEVICE (FOCUS_VENDOR_ID ,FOCUS_PRODUCT_ID_BI ) }, {USB_DEVICE (FOCUS_VENDOR_ID ,FOCUS_PRODUCT_ID_UNI ) }, + {USB_DEVICE_INTERFACE_CLASS (0x0c2e ,0x0730 ,0xff ) },/* MS7820 */ { },/* Terminating entry. */ };MODULE_DEVICE_TABLE (usb, id_table);
fs/fscache/object-list.c +7 -0
@@ -330,6 +330,13 @@ static void fscache_objlist_config(struct fscache_objlist_data *data)rcu_read_lock (); confkey = key->payload.data; +if (!confkey) { +/* key was revoked */ +rcu_read_unlock (); +key_put (key); + goto no_config; + } + buf = confkey->data;for (len = confkey->datalen -1 ; len >=0 ; len--) {
include/linux/mbus.h +2 -2
@@ -29,8 +29,8 @@ struct mbus_dram_target_infostruct mbus_dram_window {u8 cs_index;u8 mbus_attr; -u32 base; -u32 size; +u64 base; +u64 size; } cs[4 ]; };
lib/digsig.c +6 -0
@@ -86,6 +86,12 @@ static int digsig_verify_rsa(struct key *key,down_read (&key->sem); ukp = key->payload.data; +if (!ukp) { +/* key was revoked before we acquired its semaphore */ + err = -EKEYREVOKED ; + goto err1; + } +if (ukp->datalen <sizeof (*pkh)) goto err1;
net/packet/af_packet.c +9 -1
@@ -697,6 +697,10 @@ static void prb_retire_rx_blk_timer_expired(unsigned long data)if (pkc->last_kactive_blk_num == pkc->kactive_blk_num) {if (!frozen) { +if (!BLOCK_NUM_PKTS (pbd)) { +/* An empty block. Just refresh the timer. */ + goto refresh_timer; + }prb_retire_current_block (pkc, po,TP_STATUS_BLK_TMO );if (!prb_dispatch_next_block (pkc, po)) goto refresh_timer;
@@ -796,7 +800,11 @@ static void prb_close_block(struct tpacket_kbdq_core *pkc1, h1->ts_last_pkt.ts_sec = last_pkt->tp_sec; h1->ts_last_pkt.ts_nsec = last_pkt->tp_nsec; }else { -/* Ok, we tmo'd - so get the current time */ +/* Ok, we tmo'd - so get the current time. +* +* It shouldn't really happen as we don't close empty +* blocks. See prb_retire_rx_blk_timer_expired(). +*/ struct timespec ts;getnstimeofday (&ts); h1->ts_last_pkt.ts_sec = ts.tv_sec;
net/sched/cls_api.c +4 -3
@@ -563,8 +563,9 @@ void tcf_exts_change(struct tcf_proto *tp, struct tcf_exts *dst, }EXPORT_SYMBOL (tcf_exts_change); -#define tcf_exts_first_act (ext) \ - list_first_entry(&(exts)->actions, struct tc_action, list) +#define tcf_exts_first_act (ext) \ + list_first_entry_or_null(&(exts)->actions, \ + struct tc_action, list)int tcf_exts_dump (struct sk_buff *skb,struct tcf_exts *exts) {
@@ -610,7 +611,7 @@ int tcf_exts_dump_stats(struct sk_buff *skb, struct tcf_exts *exts) {#ifdef CONFIG_NET_CLS_ACT struct tc_action *a =tcf_exts_first_act (exts); -if (tcf_action_copy_stats (skb, a,1 ) <0 ) +if (a !=NULL &&tcf_action_copy_stats (skb, a,1 ) <0 )return -1 ;#endif return 0 ;
security/keys/encrypted-keys/encrypted.c +7 -0
@@ -315,6 +315,13 @@ static struct key *request_user_key(const char *master_desc, u8 **master_key,down_read (&ukey->sem); upayload = ukey->payload.data; +if (!upayload) { +/* key was revoked before we acquired its semaphore */ +up_read (&ukey->sem); +key_put (ukey); + ukey =ERR_PTR (-EKEYREVOKED ); + goto error; + } *master_key = upayload->data; *master_keylen = upayload->datalen; error:
security/keys/key.c +10 -0
@@ -909,6 +909,16 @@ error:*/ __key_link_end (keyring, &index_key, edit); + key =key_ref_to_ptr (key_ref); +if (test_bit (KEY_FLAG_USER_CONSTRUCT , &key->flags)) { + ret =wait_for_key_construction (key, true); +if (ret <0 ) { +key_ref_put (key_ref); + key_ref =ERR_PTR (ret); + goto error_free_prep; + } + } + key_ref =__key_update (key_ref, &prep); goto error_free_prep; }
sound/core/seq/seq_lock.c +0 -4
@@ -23,8 +23,6 @@#include <sound/core.h> #include "seq_lock.h" -#if defined(CONFIG_SMP ) || defined(CONFIG_SND_DEBUG ) -/* wait until all locks are released */ void snd_use_lock_sync_helper (snd_use_lock_t *lockp,const char *file,int line) {
@@ -42,5 +40,3 @@ void snd_use_lock_sync_helper(snd_use_lock_t *lockp, const char *file, int line) }EXPORT_SYMBOL (snd_use_lock_sync_helper); - -#endif
sound/core/seq/seq_lock.h +0 -12
@@ -3,8 +3,6 @@#include <linux/sched.h> -#if defined(CONFIG_SMP ) || defined(CONFIG_SND_DEBUG ) -typedef atomic_t snd_use_lock_t ;/* initialize lock */
@@ -20,14 +18,4 @@ typedef atomic_t snd_use_lock_t;void snd_use_lock_sync_helper (snd_use_lock_t *lock,const char *file,int line);#define snd_use_lock_sync (lockp) snd_use_lock_sync_helper(lockp, __BASE_FILE__, __LINE__) -#else /* SMP || CONFIG_SND_DEBUG */ - -typedef spinlock_t snd_use_lock_t ;/* dummy */ -#define snd_use_lock_init (lockp)/**/ -#define snd_use_lock_use (lockp)/**/ -#define snd_use_lock_free (lockp)/**/ -#define snd_use_lock_sync (lockp)/**/ - -#endif /* SMP || CONFIG_SND_DEBUG */ -#endif /* __SND_SEQ_LOCK_H */
sound/pci/hda/hda_codec.c +1 -1
@@ -2824,7 +2824,7 @@ static int get_kctl_0dB_offset(struct hda_codec *codec,return -1 ;if (*step_to_check && *step_to_check != step) {codec_err (codec,"Mismatching dB step for vmaster slave (%d!=%d)\n" , -- *step_to_check, step); + *step_to_check, step);return -1 ; } *step_to_check = step;