Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394-2.6
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394-2.6: firewire: cdev: change license of exported header files to MIT license firewire: cdev: comment fixlet firewire: cdev: iso packet documentation firewire: cdev: fix information leak firewire: cdev: require quadlet-aligned headers for transmit packets firewire: cdev: disallow receive packets without header
This commit is contained in:
@@ -960,6 +960,8 @@ static int ioctl_queue_iso(struct client *client, union ioctl_arg *arg)
|
||||
u.packet.header_length = GET_HEADER_LENGTH(control);
|
||||
|
||||
if (ctx->type == FW_ISO_CONTEXT_TRANSMIT) {
|
||||
if (u.packet.header_length % 4 != 0)
|
||||
return -EINVAL;
|
||||
header_length = u.packet.header_length;
|
||||
} else {
|
||||
/*
|
||||
@@ -969,7 +971,8 @@ static int ioctl_queue_iso(struct client *client, union ioctl_arg *arg)
|
||||
if (ctx->header_size == 0) {
|
||||
if (u.packet.header_length > 0)
|
||||
return -EINVAL;
|
||||
} else if (u.packet.header_length % ctx->header_size != 0) {
|
||||
} else if (u.packet.header_length == 0 ||
|
||||
u.packet.header_length % ctx->header_size != 0) {
|
||||
return -EINVAL;
|
||||
}
|
||||
header_length = 0;
|
||||
@@ -1354,24 +1357,24 @@ static int dispatch_ioctl(struct client *client,
|
||||
return -ENODEV;
|
||||
|
||||
if (_IOC_TYPE(cmd) != '#' ||
|
||||
_IOC_NR(cmd) >= ARRAY_SIZE(ioctl_handlers))
|
||||
_IOC_NR(cmd) >= ARRAY_SIZE(ioctl_handlers) ||
|
||||
_IOC_SIZE(cmd) > sizeof(buffer))
|
||||
return -EINVAL;
|
||||
|
||||
if (_IOC_DIR(cmd) & _IOC_WRITE) {
|
||||
if (_IOC_SIZE(cmd) > sizeof(buffer) ||
|
||||
copy_from_user(&buffer, arg, _IOC_SIZE(cmd)))
|
||||
if (_IOC_DIR(cmd) == _IOC_READ)
|
||||
memset(&buffer, 0, _IOC_SIZE(cmd));
|
||||
|
||||
if (_IOC_DIR(cmd) & _IOC_WRITE)
|
||||
if (copy_from_user(&buffer, arg, _IOC_SIZE(cmd)))
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
ret = ioctl_handlers[_IOC_NR(cmd)](client, &buffer);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
if (_IOC_DIR(cmd) & _IOC_READ) {
|
||||
if (_IOC_SIZE(cmd) > sizeof(buffer) ||
|
||||
copy_to_user(arg, &buffer, _IOC_SIZE(cmd)))
|
||||
if (_IOC_DIR(cmd) & _IOC_READ)
|
||||
if (copy_to_user(arg, &buffer, _IOC_SIZE(cmd)))
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
Reference in New Issue
Block a user