All of lore.kernel.org
 help / color / mirror / Atom feed
From: Khem Raj <raj.khem@gmail.com>
To: linux-bluetooth@vger.kernel.org
Cc: raj.khem@gmail.com
Subject: [patch] hid2hci check usb_init return value
Date: Thu, 25 Dec 2008 15:14:44 -0800	[thread overview]
Message-ID: <20081225231444.GA23751@gmail.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 597 bytes --]

Hi

Working on a system which did not have a USB in it. I was getting a
segfault with hid2hci. The problem tracked down was usb_init () was 
failing and we did not check for it and carried on with execution. 
As a result the next call to libusb failed because we passed in NULL for
ctx because during usb_init () this should have been malloc'ed if all
have gone correctly but in case of error usb_init () free's up the
allocated memory and hence the segfault. 

We should check for return value of usb_init () call and exit
immediately if it fails. Tested on 4.24 release. 

OK ?

Thanks

-Khem



[-- Attachment #2: hid2hci_usb_init.patch --]
[-- Type: text/x-diff, Size: 1108 bytes --]

# Signed-off-by: Khem Raj <raj.khem@gmail.com>
#
# Use the new usb1 API for usb_init() and check for fails from 
# usb_init (). Currently we see a crash on a system which does
# not have USB because usb_init() fails and it cleans up all initialized
# data (e.g. ctx) which is used in subsequent calls to libusb
# We return immediately if usb_init() fails for some reason.

Index: bluez-4.24/tools/hid2hci.c
===================================================================
--- bluez-4.24.orig/tools/hid2hci.c	2008-10-25 23:40:34.000000000 -0700
+++ bluez-4.24/tools/hid2hci.c	2008-12-25 01:24:12.000000000 -0800
@@ -337,7 +337,7 @@
 int main(int argc, char *argv[])
 {
 	struct device_info dev[16];
-	int i, opt, num, quiet = 0, mode = HCI;
+	int i, ret, opt, num, quiet = 0, mode = HCI;
 
 	while ((opt = getopt_long(argc, argv, "+01qh", main_options, NULL)) != -1) {
 		switch (opt) {
@@ -361,8 +361,9 @@
 	argc -= optind;
 	argv += optind;
 	optind = 0;
-
-	usb_init();
+	ret = usb_init();
+	if (ret < 0)
+		return ret;
 
 	num = find_devices(mode, dev, sizeof(dev) / sizeof(dev[0]));
 	if (num <= 0) {

             reply	other threads:[~2008-12-25 23:14 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-12-25 23:14 Khem Raj [this message]
2008-12-29 12:12 ` [patch] hid2hci check usb_init return value Marcel Holtmann
2008-12-30  6:26   ` Khem Raj
2009-01-06  2:54     ` Marcel Holtmann
2009-01-06  3:02       ` David Sainty
2009-01-06  5:19         ` Marcel Holtmann
2009-01-06 18:17       ` Khem Raj
2009-01-06 18:21         ` Marcel Holtmann

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20081225231444.GA23751@gmail.com \
    --to=raj.khem@gmail.com \
    --cc=linux-bluetooth@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.