lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Date:	Thu, 17 Feb 2011 13:55:40 +0100
From:	Antonio Ospite <ospite@...denti.unina.it>
To:	Alan Ott <alan@...nal11.us>
Cc:	Marcin Tolysz <tolysz@...il.com>,
	Randy Dunlap <rdunlap@...otime.net>,
	Jiri Kosina <jkosina@...e.cz>, linux-doc@...r.kernel.org,
	linux-kernel@...r.kernel.org, linux-input@...r.kernel.org,
	greg@...ah.com, stern@...land.harvard.edu
Subject: Re: [PATCH v4 1/1] hid: Add HID Report Descriptor to sysfs.

On Sun, 23 Jan 2011 22:50:18 -0500
Alan Ott <alan@...nal11.us> wrote:

> Add a new binary sysfs entry called report_descriptor which contains
> the HID report descriptor.
> 
> Signed-off-by: Alan Ott <alan@...nal11.us>

Adding Marcin Tolysz to CC, he is interested in a mechanism to
override the hid_descriptor from userspace dynamically.

Marcin, now that this 'report_descriptor' sysfs attribute has been
accepted as read-only in mainline, maybe you could implement the .write
method for it if your firmware approach to override hid descriptors
would not be accepted. Just pointing at an alternative option, not sure
if it is the best one.

Regards,
   Antonio

> ---
>  Documentation/ABI/testing/sysfs-driver-hid |   10 ++++++++
>  drivers/hid/hid-core.c                     |   33 ++++++++++++++++++++++++++++
>  2 files changed, 43 insertions(+), 0 deletions(-)
>  create mode 100644 Documentation/ABI/testing/sysfs-driver-hid
> 
> diff --git a/Documentation/ABI/testing/sysfs-driver-hid b/Documentation/ABI/testing/sysfs-driver-hid
> new file mode 100644
> index 0000000..b6490e1
> --- /dev/null
> +++ b/Documentation/ABI/testing/sysfs-driver-hid
> @@ -0,0 +1,10 @@
> +What:		For USB devices	: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/report_descriptor
> +		For BT devices	: /sys/class/bluetooth/hci<addr>/<hid-bus>:<vendor-id>:<product-id>.<num>/report_descriptor
> +		Symlink		: /sys/class/hidraw/hidraw<num>/device/report_descriptor
> +Date:		Jan 2011
> +KernelVersion:	2.0.39
> +Contact:	Alan Ott <alan@...nal11.us>
> +Description:	When read, this file returns the device's raw binary HID
> +		report descriptor.
> +		This file cannot be written.
> +Users:		HIDAPI library (http://www.signal11.us/oss/hidapi)
> diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
> index d678cf3..32bbd5d 100644
> --- a/drivers/hid/hid-core.c
> +++ b/drivers/hid/hid-core.c
> @@ -1159,6 +1159,32 @@ static bool hid_hiddev(struct hid_device *hdev)
>  	return !!hid_match_id(hdev, hid_hiddev_list);
>  }
>  
> +
> +static ssize_t
> +read_report_descriptor(struct file *filp, struct kobject *kobj,
> +		struct bin_attribute *attr,
> +		char *buf, loff_t off, size_t count)
> +{
> +	struct device *dev = container_of(kobj, struct device, kobj);
> +	struct hid_device *hdev = container_of(dev, struct hid_device, dev);
> +
> +	if (off >= hdev->rsize)
> +		return 0;
> +
> +	if (off + count > hdev->rsize)
> +		count = hdev->rsize - off;
> +
> +	memcpy(buf, hdev->rdesc + off, count);
> +
> +	return count;
> +}
> +
> +static struct bin_attribute dev_bin_attr_report_desc = {
> +	.attr = { .name = "report_descriptor", .mode = 0444 },
> +	.read = read_report_descriptor,
> +	.size = HID_MAX_DESCRIPTOR_SIZE,
> +};
> +
>  int hid_connect(struct hid_device *hdev, unsigned int connect_mask)
>  {
>  	static const char *types[] = { "Device", "Pointer", "Mouse", "Device",
> @@ -1169,6 +1195,7 @@ int hid_connect(struct hid_device *hdev, unsigned int connect_mask)
>  	char buf[64];
>  	unsigned int i;
>  	int len;
> +	int ret;
>  
>  	if (hdev->quirks & HID_QUIRK_HIDDEV_FORCE)
>  		connect_mask |= (HID_CONNECT_HIDDEV_FORCE | HID_CONNECT_HIDDEV);
> @@ -1230,6 +1257,11 @@ int hid_connect(struct hid_device *hdev, unsigned int connect_mask)
>  		bus = "<UNKNOWN>";
>  	}
>  
> +	ret = device_create_bin_file(&hdev->dev, &dev_bin_attr_report_desc);
> +	if (ret)
> +		hid_warn(hdev,
> +			 "can't create sysfs report descriptor attribute err: %d\n", ret);
> +
>  	hid_info(hdev, "%s: %s HID v%x.%02x %s [%s] on %s\n",
>  		 buf, bus, hdev->version >> 8, hdev->version & 0xff,
>  		 type, hdev->name, hdev->phys);
> @@ -1240,6 +1272,7 @@ EXPORT_SYMBOL_GPL(hid_connect);
>  
>  void hid_disconnect(struct hid_device *hdev)
>  {
> +	device_remove_bin_file(&hdev->dev, &dev_bin_attr_report_desc);
>  	if (hdev->claimed & HID_CLAIMED_INPUT)
>  		hidinput_disconnect(hdev);
>  	if (hdev->claimed & HID_CLAIMED_HIDDEV)
> -- 
> 1.7.0.4
> 
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-input" in
> the body of a message to majordomo@...r.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 


-- 
Antonio Ospite
http://ao2.it

PGP public key ID: 0x4553B001

A: Because it messes up the order in which people normally read text.
   See http://en.wikipedia.org/wiki/Posting_style
Q: Why is top-posting such a bad thing?

Content of type "application/pgp-signature" skipped

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ