Linux 4.4.270
Greg Kroah-Hartman
maintainerI'm announcing the release of the 4.4.270 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/openrisc/kernel/setup.c | 2 drivers/cdrom/gdrom.c | 13 +++- drivers/hwmon/lm80.c | 11 --- drivers/leds/leds-lp5523.c | 2 drivers/md/dm-snap.c | 1 drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c | 3 - drivers/net/ethernet/stmicro/stmmac/dwmac-sunxi.c | 8 +- drivers/net/ethernet/sun/niu.c | 32 +++++++---- drivers/net/wireless/realtek/rtlwifi/base.c | 19 +++--- drivers/scsi/qla2xxx/qla_nx.c | 3 - drivers/tty/vt/vt.c | 2 drivers/tty/vt/vt_ioctl.c | 6 +- drivers/video/console/fbcon.c | 2 drivers/video/console/vgacon.c | 56 +++++++++++--------- drivers/video/fbdev/hgafb.c | 21 ++++--- drivers/video/fbdev/imsttfb.c | 5 - drivers/xen/xen-pciback/xenbus.c | 22 ++++++- fs/cifs/smb2ops.c | 2 fs/ecryptfs/crypto.c | 6 -- include/linux/console_struct.h | 1 kernel/ptrace.c | 18 ++++++ net/bluetooth/smp.c | 9 +++ sound/firewire/Kconfig | 4 - sound/firewire/bebob/bebob.c | 2 sound/firewire/oxfw/oxfw.c | 1 sound/isa/sb/sb8.c | 4 - sound/usb/midi.c | 4 + 28 files changed, 158 insertions(+), 103 deletions(-)
Anirudh Rayabharam (2):
net: stmicro: handle clk_prepare() failure during init
video: hgafb: correctly handle card detect failure during probe
Atul Gopinathan (1):
cdrom: gdrom: deallocate struct gdrom_unit fields in remove_gdrom
Christophe JAILLET (1):
openrisc: Fix a memory leak
Du Cheng (1):
ethernet: sun: niu: fix missing checks of niu_pci_eeprom_read()
Greg Kroah-Hartman (14):
Revert "ALSA: sb8: add a check for request_region"
Revert "video: hgafb: fix potential NULL pointer dereference" Revert "net: stmicro: fix a missing check of clk_prepare" Revert "leds: lp5523: fix a missing check of return value of lp55xx_read" Revert "hwmon: (lm80) fix a missing check of bus read in lm80 probe" Revert "video: imsttfb: fix potential NULL pointer dereferences" Revert "ecryptfs: replace BUG_ON with error handling code" Revert "gdrom: fix a memory leak bug"
cdrom: gdrom: initialize global variable at init time
Revert "rtlwifi: fix a potential NULL pointer dereference" Revert "qlcnic: Avoid potential NULL pointer dereference" Revert "niu: fix missing checks of niu_pci_eeprom_read"
net: rtlwifi: properly check for alloc_workqueue() failure Linux 4.4.270
Igor Matheus Andrade Torrente (1):
video: hgafb: fix potential NULL pointer dereference
Jan Beulich (1):
xen-pciback: reconfigure also from backend watch handler
Luiz Augusto von Dentz (1):
Bluetooth: SMP: Fail if remote and local public keys are identical
Maciej W. Rozycki (2):
vgacon: Record video mode changes with VT_RESIZEX
vt: Fix character height handling with VT_RESIZEX
Mikulas Patocka (1):
dm snapshot: fix crash with transient storage and zero chunk size
Oleg Nesterov (1):
ptrace: make ptrace() fail if the tracee changed its pid unexpectedly
Phillip Potter (1):
leds: lp5523: check return value of lp5xx_read and jump to cleanup code
Ronnie Sahlberg (1):
cifs: fix memory leak in smb2_copychunk_range
Takashi Iwai (1):
ALSA: usb-audio: Validate MS endpoint descriptors
Takashi Sakamoto (1):
ALSA: bebob/oxfw: fix Kconfig entry for Mackie d.2 Pro
Tetsuo Handa (1):
tty: vt: always invoke vc->vc_sw->con_resize callback
Tom Seewald (1):
qlcnic: Add null check after calling netdev_alloc_skb
Zhen Lei (1):
scsi: qla2xxx: Fix error return code in qla82xx_write_flash_dword()
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,6 +1,6 @@ VERSION = 4 PATCHLEVEL = 4 -SUBLEVEL = 269 +SUBLEVEL = 270 EXTRAVERSION = NAME = Blurry Fish Butt
arch/openrisc/kernel/setup.c +2 -0
@@ -278,6 +278,8 @@ void calibrate_delay(void)pr_cont ("%lu.%02lu BogoMIPS (lpj=%lu)\n" , loops_per_jiffy / (500000 /HZ ), (loops_per_jiffy / (5000 /HZ )) %100 , loops_per_jiffy); + +of_node_put (cpu); }void __init setup_arch (char **cmdline_p)
drivers/cdrom/gdrom.c +10 -3
@@ -773,6 +773,13 @@ static int probe_gdrom_setupqueue(void)static int probe_gdrom (struct platform_device *devptr) {int err; + +/* +* Ensure our "one" device is initialized properly in case of previous +* usages of it +*/ +memset (&gd,0 ,sizeof (gd)); +/* Start the device */ if (gdrom_execute_diagnostic () !=1 ) {pr_warning ("ATA Probe for GDROM failed\n" );
@@ -850,6 +857,8 @@ static int remove_gdrom(struct platform_device *devptr)if (gdrom_major)unregister_blkdev (gdrom_major,GDROM_DEV_NAME );unregister_cdrom (gd.cd_info); +kfree (gd.cd_info); +kfree (gd.toc);return 0 ; }
@@ -865,7 +874,7 @@ static struct platform_driver gdrom_driver = {static int __init init_gdrom (void ) {int rc; - gd.toc =NULL ; + rc =platform_driver_register (&gdrom_driver);if (rc)return rc;
@@ -881,8 +890,6 @@ static void __exit exit_gdrom(void) {platform_device_unregister (pd);platform_driver_unregister (&gdrom_driver); -kfree (gd.toc); -kfree (gd.cd_info); }module_init (init_gdrom);
drivers/hwmon/lm80.c +2 -9
@@ -630,7 +630,6 @@ static int lm80_probe(struct i2c_client *client,struct device *dev = &client->dev;struct device *hwmon_dev;struct lm80_data *data; -int rv; data =devm_kzalloc (dev,sizeof (struct lm80_data ),GFP_KERNEL );if (!data)
@@ -643,14 +642,8 @@ static int lm80_probe(struct i2c_client *client,lm80_init_client (client);/* A few vars need to be filled upon startup */ - rv =lm80_read_value (client,LM80_REG_FAN_MIN (1 )); -if (rv <0 ) -return rv; - data->fan[f_min][0 ] = rv; - rv =lm80_read_value (client,LM80_REG_FAN_MIN (2 )); -if (rv <0 ) -return rv; - data->fan[f_min][1 ] = rv; + data->fan[f_min][0 ] =lm80_read_value (client,LM80_REG_FAN_MIN (1 )); + data->fan[f_min][1 ] =lm80_read_value (client,LM80_REG_FAN_MIN (2 )); hwmon_dev =devm_hwmon_device_register_with_groups (dev, client->name, data, lm80_groups);
drivers/leds/leds-lp5523.c +1 -1
@@ -320,7 +320,7 @@ static int lp5523_init_program_engine(struct lp55xx_chip *chip)usleep_range (3000 ,6000 ); ret =lp55xx_read (chip,LP5523_REG_STATUS , &status);if (ret) -return ret; + goto out; status &=LP5523_ENG_STATUS_MASK ;if (status !=LP5523_ENG_STATUS_MASK ) {
drivers/md/dm-snap.c +1 -0
@@ -1265,6 +1265,7 @@ static int snapshot_ctr(struct dm_target *ti, unsigned int argc, char **argv)if (!s->store->chunk_size) { ti->error ="Chunk size not set" ; + r = -EINVAL ; goto bad_read_metadata; }
drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c +2 -1
@@ -1039,7 +1039,7 @@ int qlcnic_do_lb_test(struct qlcnic_adapter *adapter, u8 mode)for (i =0 ; i <QLCNIC_NUM_ILB_PKT ; i++) { skb =netdev_alloc_skb (adapter->netdev,QLCNIC_ILB_PKT_SIZE );if (!skb) -break ; + goto error;qlcnic_create_loopback_buff (skb->data, adapter->mac_addr);skb_put (skb,QLCNIC_ILB_PKT_SIZE ); adapter->ahw->diag_cnt =0 ;
@@ -1063,6 +1063,7 @@ int qlcnic_do_lb_test(struct qlcnic_adapter *adapter, u8 mode) cnt++; }if (cnt != i) { +error:dev_err (&adapter->pdev->dev,"LB Test: failed, TX[%d], RX[%d]\n" , i, cnt);if (mode !=QLCNIC_ILB_MODE )
drivers/net/ethernet/stmicro/stmmac/dwmac-sunxi.c +4 -4
@@ -39,7 +39,7 @@ struct sunxi_priv_data {static int sun7i_gmac_init (struct platform_device *pdev,void *priv) {struct sunxi_priv_data *gmac = priv; -int ret; +int ret =0 ;if (gmac->regulator) { ret =regulator_enable (gmac->regulator);
@@ -60,11 +60,11 @@ static int sun7i_gmac_init(struct platform_device *pdev, void *priv) }else {clk_set_rate (gmac->tx_clk,SUN7I_GMAC_MII_RATE ); ret =clk_prepare (gmac->tx_clk); -if (ret) -return ret; +if (ret && gmac->regulator) +regulator_disable (gmac->regulator); } -return 0 ; +return ret; }static void sun7i_gmac_exit (struct platform_device *pdev,void *priv)
drivers/net/ethernet/sun/niu.c +20 -12
@@ -8166,10 +8166,10 @@ static int niu_pci_vpd_scan_props(struct niu *np, u32 start, u32 end)"VPD_SCAN: Reading in property [%s] len[%d]\n" , namebuf, prop_len);for (i =0 ; i < prop_len; i++) { - err =niu_pci_eeprom_read (np, off + i); -if (err >=0 ) - *prop_buf = err; - ++prop_buf; + err =niu_pci_eeprom_read (np, off + i); +if (err <0 ) +return err; + *prop_buf++ = err; } }
@@ -8180,14 +8180,14 @@ static int niu_pci_vpd_scan_props(struct niu *np, u32 start, u32 end) }/* ESPC_PIO_EN_ENABLE must be set */ -static void niu_pci_vpd_fetch (struct niu *np,u32 start) +static int niu_pci_vpd_fetch (struct niu *np,u32 start) {u32 offset;int err; err =niu_pci_eeprom_read16_swp (np, start +1 );if (err <0 ) -return ; +return err; offset = err +3 ;
@@ -8196,12 +8196,14 @@ static void niu_pci_vpd_fetch(struct niu *np, u32 start)u32 end; err =niu_pci_eeprom_read (np, here); +if (err <0 ) +return err;if (err !=0x90 ) -return ; +return -EINVAL ; err =niu_pci_eeprom_read16_swp (np, here +1 );if (err <0 ) -return ; +return err; here = start + offset +3 ; end = start + offset + err;
@@ -8209,9 +8211,12 @@ static void niu_pci_vpd_fetch(struct niu *np, u32 start) offset += err; err =niu_pci_vpd_scan_props (np, here, end); -if (err <0 || err ==1 ) -return ; +if (err <0 ) +return err; +if (err ==1 ) +return -EINVAL ; } +return 0 ; }/* ESPC_PIO_EN_ENABLE must be set */
@@ -9304,8 +9309,11 @@ static int niu_get_invariants(struct niu *np) offset =niu_pci_vpd_offset (np);netif_printk (np, probe,KERN_DEBUG , np->dev,"%s() VPD offset [%08x]\n" , __func__, offset); -if (offset) -niu_pci_vpd_fetch (np, offset); +if (offset) { + err =niu_pci_vpd_fetch (np, offset); +if (err <0 ) +return err; + }nw64 (ESPC_PIO_EN ,0 );if (np->flags &NIU_FLAGS_VPD_VALID ) {
drivers/net/wireless/realtek/rtlwifi/base.c +9 -10
@@ -454,9 +454,14 @@ static void _rtl_init_mac80211(struct ieee80211_hw *hw) } } -static void _rtl_init_deferred_work (struct ieee80211_hw *hw) +static int _rtl_init_deferred_work (struct ieee80211_hw *hw) {struct rtl_priv *rtlpriv =rtl_priv (hw); +struct workqueue_struct *wq; + + wq =alloc_workqueue ("%s" ,0 ,0 , rtlpriv->cfg->name); +if (!wq) +return -ENOMEM ;/* <1> timer */ setup_timer(&rtlpriv->works.watchdog_timer,
@@ -465,11 +470,7 @@ static void _rtl_init_deferred_work(struct ieee80211_hw *hw) rtl_easy_concurrent_retrytimer_callback, (unsigned long)hw);/* <2> work queue */ rtlpriv->works.hw = hw; - rtlpriv->works.rtl_wq =alloc_workqueue ("%s" ,0 ,0 , rtlpriv->cfg->name); -if (unlikely (!rtlpriv->works.rtl_wq)) { -pr_err ("Failed to allocate work queue\n" ); -return ; - } + rtlpriv->works.rtl_wq = wq;INIT_DELAYED_WORK (&rtlpriv->works.watchdog_wq, (void *)rtl_watchdog_wq_callback);
@@ -481,7 +482,7 @@ static void _rtl_init_deferred_work(struct ieee80211_hw *hw) (void *)rtl_swlps_rfon_wq_callback);INIT_DELAYED_WORK (&rtlpriv->works.fwevt_wq, (void *)rtl_fwevt_wq_callback); - +return 0 ; }void rtl_deinit_deferred_work (struct ieee80211_hw *hw)
@@ -573,9 +574,7 @@ int rtl_init_core(struct ieee80211_hw *hw) rtlmac->link_state =MAC80211_NOLINK ;/* <6> init deferred work */ -_rtl_init_deferred_work (hw); - -return 0 ; +return _rtl_init_deferred_work (hw); }EXPORT_SYMBOL_GPL (rtl_init_core);
drivers/scsi/qla2xxx/qla_nx.c +2 -1
@@ -1103,7 +1103,8 @@ qla82xx_write_flash_dword(struct qla_hw_data *ha, uint32_t flashaddr,return ret; } -if (qla82xx_flash_set_write_enable (ha)) + ret =qla82xx_flash_set_write_enable (ha); +if (ret <0 ) goto done_write;qla82xx_wr_32 (ha,QLA82XX_ROMUSB_ROM_WDATA , data);
drivers/tty/vt/vt.c +1 -1
@@ -826,7 +826,7 @@ static inline int resize_screen(struct vc_data *vc, int width, int height,/* Resizes the resolution of the display adapater */ int err =0 ; -if (vc->vc_mode !=KD_GRAPHICS && vc->vc_sw->con_resize) +if (vc->vc_sw->con_resize) err = vc->vc_sw->con_resize (vc, width, height, user);return err;
drivers/tty/vt/vt_ioctl.c +3 -3
@@ -898,17 +898,17 @@ int vt_ioctl(struct tty_struct *tty,if (vcp) {int ret;int save_scan_lines = vcp->vc_scan_lines; -int save_font_height = vcp->vc_font.height; +int save_cell_height = vcp->vc_cell_height;if (v.v_vlin) vcp->vc_scan_lines = v.v_vlin;if (v.v_clin) - vcp->vc_font.height = v.v_clin; + vcp->vc_cell_height = v.v_clin; vcp->vc_resize_user =1 ; ret =vc_resize (vcp, v.v_cols, v.v_rows);if (ret) { vcp->vc_scan_lines = save_scan_lines; - vcp->vc_font.height = save_font_height; + vcp->vc_cell_height = save_cell_height;console_unlock ();return ret; }
drivers/video/console/fbcon.c +1 -1
@@ -1986,7 +1986,7 @@ static int fbcon_resize(struct vc_data *vc, unsigned int width,return -EINVAL ;DPRINTK ("resize now %ix%i\n" , var.xres, var.yres); -if (CON_IS_VISIBLE (vc)) { +if (CON_IS_VISIBLE (vc) && vc->vc_mode ==KD_TEXT ) { var.activate =FB_ACTIVATE_NOW |FB_ACTIVATE_FORCE ;fb_set_var (info, &var);
drivers/video/console/vgacon.c +32 -24
119 lines not on this page · raw message
drivers/video/fbdev/hgafb.c +12 -9
@@ -286,7 +286,7 @@ static int hga_card_detect(void) hga_vram =ioremap (0xb0000 , hga_vram_len);if (!hga_vram) - goto error; +return -ENOMEM ;if (request_region (0x3b0 ,12 ,"hgafb" )) release_io_ports =1 ;
@@ -346,13 +346,18 @@ static int hga_card_detect(void) hga_type_name ="Hercules" ;break ; } -return 1 ; +return 0 ; error:if (release_io_ports)release_region (0x3b0 ,12 );if (release_io_port)release_region (0x3bf ,1 ); -return 0 ; + +iounmap (hga_vram); + +pr_err ("hgafb: HGA card not detected.\n" ); + +return -EINVAL ; }/**
@@ -550,13 +555,11 @@ static struct fb_ops hgafb_ops = {static int hgafb_probe (struct platform_device *pdev) {struct fb_info *info; +int ret; -if (!hga_card_detect ()) { -printk (KERN_INFO "hgafb: HGA card not detected.\n" ); -if (hga_vram) -iounmap (hga_vram); -return -EINVAL ; - } + ret =hga_card_detect (); +if (ret) +return ret;printk (KERN_INFO "hgafb: %s with %ldK of memory detected.\n" , hga_type_name, hga_vram_len/1024 );
drivers/video/fbdev/imsttfb.c +0 -5
@@ -1517,11 +1517,6 @@ static int imsttfb_probe(struct pci_dev *pdev, const struct pci_device_id *ent) info->fix.smem_start = addr; info->screen_base = (__u8 *)ioremap (addr, par->ramdac ==IBM ?0x400000 :0x800000 ); -if (!info->screen_base) { -release_mem_region (addr, size); -framebuffer_release (info); -return -ENOMEM ; - } info->fix.mmio_start = addr +0x800000 ; par->dc_regs =ioremap (addr +0x800000 ,0x1000 ); par->cmap_regs_phys = addr +0x840000 ;
drivers/xen/xen-pciback/xenbus.c +17 -5
@@ -359,7 +359,8 @@ out:return err; } -static int xen_pcibk_reconfigure (struct xen_pcibk_device *pdev) +static int xen_pcibk_reconfigure (struct xen_pcibk_device *pdev, +enum xenbus_state state) {int err =0 ;int num_devs;
@@ -373,9 +374,7 @@ static int xen_pcibk_reconfigure(struct xen_pcibk_device *pdev)dev_dbg (&pdev->xdev->dev,"Reconfiguring device ...\n" );mutex_lock (&pdev->dev_lock); -/* Make sure we only reconfigure once */ -if (xenbus_read_driver_state (pdev->xdev->nodename) != - XenbusStateReconfiguring) +if (xenbus_read_driver_state (pdev->xdev->nodename) != state) goto out; err = xenbus_scanf(XBT_NIL, pdev->xdev->nodename, "num_devs", "%d",
@@ -502,6 +501,10 @@ static int xen_pcibk_reconfigure(struct xen_pcibk_device *pdev) } } +if (state != XenbusStateReconfiguring) +/* Make sure we only reconfigure once. */ + goto out; + err =xenbus_switch_state (pdev->xdev, XenbusStateReconfigured);if (err) { xenbus_dev_fatal(pdev->xdev, err,
@@ -527,7 +530,7 @@ static void xen_pcibk_frontend_changed(struct xenbus_device *xdev,break ;case XenbusStateReconfiguring: -xen_pcibk_reconfigure (pdev); +xen_pcibk_reconfigure (pdev, XenbusStateReconfiguring);break ;case XenbusStateConnected:
@@ -666,6 +669,15 @@ static void xen_pcibk_be_watch(struct xenbus_watch *watch,xen_pcibk_setup_backend (pdev);break ; +case XenbusStateInitialised: +/* +* We typically move to Initialised when the first device was +* added. Hence subsequent devices getting added may need +* reconfiguring. +*/ +xen_pcibk_reconfigure (pdev, XenbusStateInitialised); +break ; +default :break ; }
fs/cifs/smb2ops.c +2 -0
@@ -619,6 +619,8 @@ smb2_clone_range(const unsigned int xid,cpu_to_le32 (min_t (u32, len, tcon->max_bytes_chunk));/* Request server copy to target from src identified by key */ +kfree (retbuf); + retbuf =NULL ; rc = SMB2_ioctl(xid, tcon, trgtfile->fid.persistent_fid, trgtfile->fid.volatile_fid, FSCTL_SRV_COPYCHUNK_WRITE, true /* is_fsctl */, (char *)pcchunk,
fs/ecryptfs/crypto.c +2 -4
@@ -346,10 +346,8 @@ static int crypt_scatterlist(struct ecryptfs_crypt_stat *crypt_stat,struct extent_crypt_result ecr;int rc =0 ; -if (!crypt_stat || !crypt_stat->tfm - || !(crypt_stat->flags &ECRYPTFS_STRUCT_INITIALIZED )) -return -EINVAL ; - +BUG_ON (!crypt_stat || !crypt_stat->tfm + || !(crypt_stat->flags &ECRYPTFS_STRUCT_INITIALIZED ));if (unlikely (ecryptfs_verbosity >0 )) {ecryptfs_printk (KERN_DEBUG ,"Key size [%zd]; key:\n" , crypt_stat->key_size);
include/linux/console_struct.h +1 -0
@@ -29,6 +29,7 @@ struct vc_data {unsigned int vc_rows;unsigned int vc_size_row;/* Bytes per row */ unsigned int vc_scan_lines;/* # of scan lines */ +unsigned int vc_cell_height;/* CRTC character cell height */ unsigned long vc_origin;/* [!] Start of real screen */ unsigned long vc_scr_end;/* [!] End of real screen */ unsigned long vc_visible_origin;/* [!] Top of visible window */
kernel/ptrace.c +17 -1
@@ -129,6 +129,21 @@ void __ptrace_unlink(struct task_struct *child)spin_unlock (&child->sighand->siglock); } +static bool looks_like_a_spurious_pid (struct task_struct *task) +{ +if (task->exit_code != ((PTRACE_EVENT_EXEC <<8 ) |SIGTRAP )) +return false; + +if (task_pid_vnr (task) == task->ptrace_message) +return false; +/* +* The tracee changed its pid but the PTRACE_EVENT_EXEC event +* was not wait()'ed, most probably debugger targets the old +* leader which was destroyed in de_thread(). +*/ +return true; +} +/* Ensure that nothing can wake it up, even SIGKILL */ static bool ptrace_freeze_traced (struct task_struct *task) {
@@ -139,7 +154,8 @@ static bool ptrace_freeze_traced(struct task_struct *task)return ret;spin_lock_irq (&task->sighand->siglock); -if (task_is_traced (task) && !__fatal_signal_pending (task)) { +if (task_is_traced (task) && !looks_like_a_spurious_pid (task) && + !__fatal_signal_pending (task)) { task->state = __TASK_TRACED; ret = true; }
net/bluetooth/smp.c +9 -0
@@ -2654,6 +2654,15 @@ static int smp_cmd_public_key(struct l2cap_conn *conn, struct sk_buff *skb)if (skb->len <sizeof (*key))return SMP_INVALID_PARAMS ; +/* Check if remote and local public keys are the same and debug key is +* not in use. +*/ +if (!test_bit (SMP_FLAG_DEBUG_KEY , &smp->flags) && + !crypto_memneq (key, smp->local_pk,64 )) { +bt_dev_err (hdev,"Remote and local public keys are identical" ); +return SMP_UNSPECIFIED ; + } +memcpy (smp->remote_pk, key,64 );if (test_bit (SMP_FLAG_REMOTE_OOB , &smp->flags)) {
sound/firewire/Kconfig +2 -2
@@ -36,7 +36,7 @@ config SND_OXFW * Mackie(Loud) Onyx-i series (former models) * Mackie(Loud) Onyx Satellite * Mackie(Loud) Tapco Link.Firewire - * Mackie(Loud) d.2 pro/d.4 pro + * Mackie(Loud) d.4 pro * Mackie(Loud) U.420/U.420d * TASCAM FireOne
@@ -91,7 +91,7 @@ config SND_BEBOB * PreSonus FIREBOX/FIREPOD/FP10/Inspire1394 * BridgeCo RDAudio1/Audio5 * Mackie Onyx 1220/1620/1640 (FireWire I/O Card) - * Mackie d.2 (FireWire Option) + * Mackie d.2 (FireWire Option) and d.2 Pro * Stanton FinalScratch 2 (ScratchAmp) * Tascam IF-FW/DM * Behringer XENIX UFX 1204/1604
sound/firewire/bebob/bebob.c +1 -1
@@ -362,7 +362,7 @@ static const struct ieee1394_device_id bebob_id_table[] = {SND_BEBOB_DEV_ENTRY (VEN_BRIDGECO ,0x00010049 , &spec_normal),/* Mackie, Onyx 1220/1620/1640 (Firewire I/O Card) */ SND_BEBOB_DEV_ENTRY (VEN_MACKIE2 ,0x00010065 , &spec_normal), -/* Mackie, d.2 (Firewire Option) */ +// Mackie, d.2 (Firewire option card) and d.2 Pro (the card is built-in). SND_BEBOB_DEV_ENTRY (VEN_MACKIE1 ,0x00010067 , &spec_normal),/* Stanton, ScratchAmp */ SND_BEBOB_DEV_ENTRY(VEN_STANTON, 0x00000001, &spec_normal),
sound/firewire/oxfw/oxfw.c +0 -1
@@ -320,7 +320,6 @@ static const struct ieee1394_device_id oxfw_id_table[] = {* Onyx-i series (former models): 0x081216 * Mackie Onyx Satellite: 0x00200f * Tapco LINK.firewire 4x6: 0x000460 -* d.2 pro: Unknown * d.4 pro: Unknown * U.420: Unknown * U.420d: Unknown
sound/isa/sb/sb8.c +0 -4
@@ -111,10 +111,6 @@ static int snd_sb8_probe(struct device *pdev, unsigned int dev)/* block the 0x388 port to avoid PnP conflicts */ acard->fm_res =request_region (0x388 ,4 ,"SoundBlaster FM" ); -if (!acard->fm_res) { - err = -EBUSY ; - goto _err; - } if (port[dev] != SNDRV_AUTO_PORT) { if ((err = snd_sbdsp_create(card, port[dev], irq[dev],
sound/usb/midi.c +4 -0
@@ -1865,8 +1865,12 @@ static int snd_usbmidi_get_ms_info(struct snd_usb_midi *umidi, ms_ep =find_usb_ms_endpoint_descriptor (hostep);if (!ms_ep)continue ; +if (ms_ep->bLength <=sizeof (*ms_ep)) +continue ;if (ms_ep->bNumEmbMIDIJack >0x10 )continue ; +if (ms_ep->bLength <sizeof (*ms_ep) + ms_ep->bNumEmbMIDIJack) +continue ;if (usb_endpoint_dir_out (ep)) {if (endpoints[epidx].out_ep) {if (++epidx >=MIDI_MAX_ENDPOINTS ) {