diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-06-28 14:15:36 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-06-28 14:15:36 -0400 |
| commit | c89b857ce6d803905b2c9d71bc9effdd286c45ed (patch) | |
| tree | 6cf4a6e23f68f3b65906210dccb272ab2f9c5c74 /drivers/misc | |
| parent | 2e34b429a404675dc4fc4ad2ee339eea028da3ca (diff) | |
| parent | 663dd6dcaf7e95526e469e91f41972a9c0cca30c (diff) | |
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
Diffstat (limited to 'drivers/misc')
| -rw-r--r-- | drivers/misc/pti.c | 11 | ||||
| -rw-r--r-- | drivers/misc/ti-st/st_core.c | 2 | ||||
| -rw-r--r-- | drivers/misc/ti-st/st_kim.c | 8 |
3 files changed, 14 insertions, 7 deletions
diff --git a/drivers/misc/pti.c b/drivers/misc/pti.c index bb6f9255c17..374dfcfccd0 100644 --- a/drivers/misc/pti.c +++ b/drivers/misc/pti.c | |||
| @@ -317,7 +317,8 @@ EXPORT_SYMBOL_GPL(pti_request_masterchannel); | |||
| 317 | * a master, channel ID address | 317 | * a master, channel ID address |
| 318 | * used to write to PTI HW. | 318 | * used to write to PTI HW. |
| 319 | * | 319 | * |
| 320 | * @mc: master, channel apeture ID address to be released. | 320 | * @mc: master, channel apeture ID address to be released. This |
| 321 | * will de-allocate the structure via kfree(). | ||
| 321 | */ | 322 | */ |
| 322 | void pti_release_masterchannel(struct pti_masterchannel *mc) | 323 | void pti_release_masterchannel(struct pti_masterchannel *mc) |
| 323 | { | 324 | { |
| @@ -475,8 +476,10 @@ static int pti_tty_install(struct tty_driver *driver, struct tty_struct *tty) | |||
| 475 | else | 476 | else |
| 476 | pti_tty_data->mc = pti_request_masterchannel(2); | 477 | pti_tty_data->mc = pti_request_masterchannel(2); |
| 477 | 478 | ||
| 478 | if (pti_tty_data->mc == NULL) | 479 | if (pti_tty_data->mc == NULL) { |
| 480 | kfree(pti_tty_data); | ||
| 479 | return -ENXIO; | 481 | return -ENXIO; |
| 482 | } | ||
| 480 | tty->driver_data = pti_tty_data; | 483 | tty->driver_data = pti_tty_data; |
| 481 | } | 484 | } |
| 482 | 485 | ||
| @@ -495,7 +498,7 @@ static void pti_tty_cleanup(struct tty_struct *tty) | |||
| 495 | if (pti_tty_data == NULL) | 498 | if (pti_tty_data == NULL) |
| 496 | return; | 499 | return; |
| 497 | pti_release_masterchannel(pti_tty_data->mc); | 500 | pti_release_masterchannel(pti_tty_data->mc); |
| 498 | kfree(tty->driver_data); | 501 | kfree(pti_tty_data); |
| 499 | tty->driver_data = NULL; | 502 | tty->driver_data = NULL; |
| 500 | } | 503 | } |
| 501 | 504 | ||
| @@ -581,7 +584,7 @@ static int pti_char_open(struct inode *inode, struct file *filp) | |||
| 581 | static int pti_char_release(struct inode *inode, struct file *filp) | 584 | static int pti_char_release(struct inode *inode, struct file *filp) |
| 582 | { | 585 | { |
| 583 | pti_release_masterchannel(filp->private_data); | 586 | pti_release_masterchannel(filp->private_data); |
| 584 | kfree(filp->private_data); | 587 | filp->private_data = NULL; |
| 585 | return 0; | 588 | return 0; |
| 586 | } | 589 | } |
| 587 | 590 | ||
diff --git a/drivers/misc/ti-st/st_core.c b/drivers/misc/ti-st/st_core.c index f91f82eabda..54c91ffe4a9 100644 --- a/drivers/misc/ti-st/st_core.c +++ b/drivers/misc/ti-st/st_core.c | |||
| @@ -605,7 +605,7 @@ long st_unregister(struct st_proto_s *proto) | |||
| 605 | pr_debug("%s: %d ", __func__, proto->chnl_id); | 605 | pr_debug("%s: %d ", __func__, proto->chnl_id); |
| 606 | 606 | ||
| 607 | st_kim_ref(&st_gdata, 0); | 607 | st_kim_ref(&st_gdata, 0); |
| 608 | if (proto->chnl_id >= ST_MAX_CHANNELS) { | 608 | if (!st_gdata || proto->chnl_id >= ST_MAX_CHANNELS) { |
| 609 | pr_err(" chnl_id %d not supported", proto->chnl_id); | 609 | pr_err(" chnl_id %d not supported", proto->chnl_id); |
| 610 | return -EPROTONOSUPPORT; | 610 | return -EPROTONOSUPPORT; |
| 611 | } | 611 | } |
diff --git a/drivers/misc/ti-st/st_kim.c b/drivers/misc/ti-st/st_kim.c index 5da93ee6f6b..38fd2f04c07 100644 --- a/drivers/misc/ti-st/st_kim.c +++ b/drivers/misc/ti-st/st_kim.c | |||
| @@ -245,9 +245,9 @@ void skip_change_remote_baud(unsigned char **ptr, long *len) | |||
| 245 | pr_err("invalid action after change remote baud command"); | 245 | pr_err("invalid action after change remote baud command"); |
| 246 | } else { | 246 | } else { |
| 247 | *ptr = *ptr + sizeof(struct bts_action) + | 247 | *ptr = *ptr + sizeof(struct bts_action) + |
| 248 | ((struct bts_action *)nxt_action)->size; | 248 | ((struct bts_action *)cur_action)->size; |
| 249 | *len = *len - (sizeof(struct bts_action) + | 249 | *len = *len - (sizeof(struct bts_action) + |
| 250 | ((struct bts_action *)nxt_action)->size); | 250 | ((struct bts_action *)cur_action)->size); |
| 251 | /* warn user on not commenting these in firmware */ | 251 | /* warn user on not commenting these in firmware */ |
| 252 | pr_warn("skipping the wait event of change remote baud"); | 252 | pr_warn("skipping the wait event of change remote baud"); |
| 253 | } | 253 | } |
| @@ -604,6 +604,10 @@ void st_kim_ref(struct st_data_s **core_data, int id) | |||
| 604 | struct kim_data_s *kim_gdata; | 604 | struct kim_data_s *kim_gdata; |
| 605 | /* get kim_gdata reference from platform device */ | 605 | /* get kim_gdata reference from platform device */ |
| 606 | pdev = st_get_plat_device(id); | 606 | pdev = st_get_plat_device(id); |
| 607 | if (!pdev) { | ||
| 608 | *core_data = NULL; | ||
| 609 | return; | ||
| 610 | } | ||
| 607 | kim_gdata = dev_get_drvdata(&pdev->dev); | 611 | kim_gdata = dev_get_drvdata(&pdev->dev); |
| 608 | *core_data = kim_gdata->core_data; | 612 | *core_data = kim_gdata->core_data; |
| 609 | } | 613 | } |
