Commit c89b857c authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'driver-core-linus' of...

Merge branch 'driver-core-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core-2.6

* 'driver-core-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core-2.6:
  Connector: Correctly set the error code in case of success when dispatching receive callbacks
  Connector: Set the CN_NETLINK_USERS correctly
  pti: PTI semantics fix in pti_tty_cleanup.
  pti: ENXIO error case memory leak PTI fix.
  pti: double-free security PTI fix
  drivers:misc: ti-st: fix skipping of change remote baud
  drivers/base/platform.c: don't mark platform_device_register_resndata() as __init_or_module
  st_kim: Handle case of no device found for ID 0
  firmware: fix GOOGLE_SMI kconfig dependency warning
parents 2e34b429 663dd6dc
...@@ -367,7 +367,7 @@ EXPORT_SYMBOL_GPL(platform_device_unregister); ...@@ -367,7 +367,7 @@ EXPORT_SYMBOL_GPL(platform_device_unregister);
* *
* Returns &struct platform_device pointer on success, or ERR_PTR() on error. * Returns &struct platform_device pointer on success, or ERR_PTR() on error.
*/ */
struct platform_device *__init_or_module platform_device_register_resndata( struct platform_device *platform_device_register_resndata(
struct device *parent, struct device *parent,
const char *name, int id, const char *name, int id,
const struct resource *res, unsigned int num, const struct resource *res, unsigned int num,
......
...@@ -139,6 +139,7 @@ static int cn_call_callback(struct sk_buff *skb) ...@@ -139,6 +139,7 @@ static int cn_call_callback(struct sk_buff *skb)
spin_unlock_bh(&dev->cbdev->queue_lock); spin_unlock_bh(&dev->cbdev->queue_lock);
if (cbq != NULL) { if (cbq != NULL) {
err = 0;
cbq->callback(msg, nsp); cbq->callback(msg, nsp);
kfree_skb(skb); kfree_skb(skb);
cn_queue_release_callback(cbq); cn_queue_release_callback(cbq);
......
...@@ -13,6 +13,7 @@ menu "Google Firmware Drivers" ...@@ -13,6 +13,7 @@ menu "Google Firmware Drivers"
config GOOGLE_SMI config GOOGLE_SMI
tristate "SMI interface for Google platforms" tristate "SMI interface for Google platforms"
depends on ACPI && DMI depends on ACPI && DMI
select EFI
select EFI_VARS select EFI_VARS
help help
Say Y here if you want to enable SMI callbacks for Google Say Y here if you want to enable SMI callbacks for Google
......
...@@ -317,7 +317,8 @@ EXPORT_SYMBOL_GPL(pti_request_masterchannel); ...@@ -317,7 +317,8 @@ EXPORT_SYMBOL_GPL(pti_request_masterchannel);
* a master, channel ID address * a master, channel ID address
* used to write to PTI HW. * used to write to PTI HW.
* *
* @mc: master, channel apeture ID address to be released. * @mc: master, channel apeture ID address to be released. This
* will de-allocate the structure via kfree().
*/ */
void pti_release_masterchannel(struct pti_masterchannel *mc) void pti_release_masterchannel(struct pti_masterchannel *mc)
{ {
...@@ -475,8 +476,10 @@ static int pti_tty_install(struct tty_driver *driver, struct tty_struct *tty) ...@@ -475,8 +476,10 @@ static int pti_tty_install(struct tty_driver *driver, struct tty_struct *tty)
else else
pti_tty_data->mc = pti_request_masterchannel(2); pti_tty_data->mc = pti_request_masterchannel(2);
if (pti_tty_data->mc == NULL) if (pti_tty_data->mc == NULL) {
kfree(pti_tty_data);
return -ENXIO; return -ENXIO;
}
tty->driver_data = pti_tty_data; tty->driver_data = pti_tty_data;
} }
...@@ -495,7 +498,7 @@ static void pti_tty_cleanup(struct tty_struct *tty) ...@@ -495,7 +498,7 @@ static void pti_tty_cleanup(struct tty_struct *tty)
if (pti_tty_data == NULL) if (pti_tty_data == NULL)
return; return;
pti_release_masterchannel(pti_tty_data->mc); pti_release_masterchannel(pti_tty_data->mc);
kfree(tty->driver_data); kfree(pti_tty_data);
tty->driver_data = NULL; tty->driver_data = NULL;
} }
...@@ -581,7 +584,7 @@ static int pti_char_open(struct inode *inode, struct file *filp) ...@@ -581,7 +584,7 @@ static int pti_char_open(struct inode *inode, struct file *filp)
static int pti_char_release(struct inode *inode, struct file *filp) static int pti_char_release(struct inode *inode, struct file *filp)
{ {
pti_release_masterchannel(filp->private_data); pti_release_masterchannel(filp->private_data);
kfree(filp->private_data); filp->private_data = NULL;
return 0; return 0;
} }
......
...@@ -605,7 +605,7 @@ long st_unregister(struct st_proto_s *proto) ...@@ -605,7 +605,7 @@ long st_unregister(struct st_proto_s *proto)
pr_debug("%s: %d ", __func__, proto->chnl_id); pr_debug("%s: %d ", __func__, proto->chnl_id);
st_kim_ref(&st_gdata, 0); st_kim_ref(&st_gdata, 0);
if (proto->chnl_id >= ST_MAX_CHANNELS) { if (!st_gdata || proto->chnl_id >= ST_MAX_CHANNELS) {
pr_err(" chnl_id %d not supported", proto->chnl_id); pr_err(" chnl_id %d not supported", proto->chnl_id);
return -EPROTONOSUPPORT; return -EPROTONOSUPPORT;
} }
......
...@@ -245,9 +245,9 @@ void skip_change_remote_baud(unsigned char **ptr, long *len) ...@@ -245,9 +245,9 @@ void skip_change_remote_baud(unsigned char **ptr, long *len)
pr_err("invalid action after change remote baud command"); pr_err("invalid action after change remote baud command");
} else { } else {
*ptr = *ptr + sizeof(struct bts_action) + *ptr = *ptr + sizeof(struct bts_action) +
((struct bts_action *)nxt_action)->size; ((struct bts_action *)cur_action)->size;
*len = *len - (sizeof(struct bts_action) + *len = *len - (sizeof(struct bts_action) +
((struct bts_action *)nxt_action)->size); ((struct bts_action *)cur_action)->size);
/* warn user on not commenting these in firmware */ /* warn user on not commenting these in firmware */
pr_warn("skipping the wait event of change remote baud"); pr_warn("skipping the wait event of change remote baud");
} }
...@@ -604,6 +604,10 @@ void st_kim_ref(struct st_data_s **core_data, int id) ...@@ -604,6 +604,10 @@ void st_kim_ref(struct st_data_s **core_data, int id)
struct kim_data_s *kim_gdata; struct kim_data_s *kim_gdata;
/* get kim_gdata reference from platform device */ /* get kim_gdata reference from platform device */
pdev = st_get_plat_device(id); pdev = st_get_plat_device(id);
if (!pdev) {
*core_data = NULL;
return;
}
kim_gdata = dev_get_drvdata(&pdev->dev); kim_gdata = dev_get_drvdata(&pdev->dev);
*core_data = kim_gdata->core_data; *core_data = kim_gdata->core_data;
} }
......
...@@ -44,7 +44,7 @@ ...@@ -44,7 +44,7 @@
#define CN_VAL_DRBD 0x1 #define CN_VAL_DRBD 0x1
#define CN_KVP_IDX 0x9 /* HyperV KVP */ #define CN_KVP_IDX 0x9 /* HyperV KVP */
#define CN_NETLINK_USERS 9 #define CN_NETLINK_USERS 10 /* Highest index + 1 */
/* /*
* Maximum connector's message size. * Maximum connector's message size.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment