提交 def76608 编写于 作者: D Dr. David Alan Gilbert 提交者: Florian Tobias Schandinat

udlfb: fix issues found with Sparse static analysis

Add __user casting, a missing copy_from_user, and proper boolean
Signed-off-by: NDr. David Alan Gilbert <linux@treblig.org>
Signed-off-by: NBernie Thompson <bernie@plugable.com>
Signed-off-by: NFlorian Tobias Schandinat <FlorianSchandinat@gmx.de>
上级 f2e1fc9d
...@@ -776,14 +776,13 @@ static int dlfb_ops_ioctl(struct fb_info *info, unsigned int cmd, ...@@ -776,14 +776,13 @@ static int dlfb_ops_ioctl(struct fb_info *info, unsigned int cmd,
{ {
struct dlfb_data *dev = info->par; struct dlfb_data *dev = info->par;
struct dloarea *area = NULL;
if (!atomic_read(&dev->usb_active)) if (!atomic_read(&dev->usb_active))
return 0; return 0;
/* TODO: Update X server to get this from sysfs instead */ /* TODO: Update X server to get this from sysfs instead */
if (cmd == DLFB_IOCTL_RETURN_EDID) { if (cmd == DLFB_IOCTL_RETURN_EDID) {
char *edid = (char *)arg; void __user *edid = (void __user *)arg;
if (copy_to_user(edid, dev->edid, dev->edid_size)) if (copy_to_user(edid, dev->edid, dev->edid_size))
return -EFAULT; return -EFAULT;
return 0; return 0;
...@@ -791,6 +790,11 @@ static int dlfb_ops_ioctl(struct fb_info *info, unsigned int cmd, ...@@ -791,6 +790,11 @@ static int dlfb_ops_ioctl(struct fb_info *info, unsigned int cmd,
/* TODO: Help propose a standard fb.h ioctl to report mmap damage */ /* TODO: Help propose a standard fb.h ioctl to report mmap damage */
if (cmd == DLFB_IOCTL_REPORT_DAMAGE) { if (cmd == DLFB_IOCTL_REPORT_DAMAGE) {
struct dloarea area;
if (copy_from_user(&area, (void __user *)arg,
sizeof(struct dloarea)))
return -EFAULT;
/* /*
* If we have a damage-aware client, turn fb_defio "off" * If we have a damage-aware client, turn fb_defio "off"
...@@ -802,21 +806,19 @@ static int dlfb_ops_ioctl(struct fb_info *info, unsigned int cmd, ...@@ -802,21 +806,19 @@ static int dlfb_ops_ioctl(struct fb_info *info, unsigned int cmd,
if (info->fbdefio) if (info->fbdefio)
info->fbdefio->delay = DL_DEFIO_WRITE_DISABLE; info->fbdefio->delay = DL_DEFIO_WRITE_DISABLE;
area = (struct dloarea *)arg; if (area.x < 0)
area.x = 0;
if (area->x < 0)
area->x = 0;
if (area->x > info->var.xres) if (area.x > info->var.xres)
area->x = info->var.xres; area.x = info->var.xres;
if (area->y < 0) if (area.y < 0)
area->y = 0; area.y = 0;
if (area->y > info->var.yres) if (area.y > info->var.yres)
area->y = info->var.yres; area.y = info->var.yres;
dlfb_handle_damage(dev, area->x, area->y, area->w, area->h, dlfb_handle_damage(dev, area.x, area.y, area.w, area.h,
info->screen_base); info->screen_base);
} }
...@@ -864,7 +866,7 @@ static int dlfb_ops_open(struct fb_info *info, int user) ...@@ -864,7 +866,7 @@ static int dlfb_ops_open(struct fb_info *info, int user)
* preventing other clients (X) from working properly. Usually * preventing other clients (X) from working properly. Usually
* not what the user wants. Fail by default with option to enable. * not what the user wants. Fail by default with option to enable.
*/ */
if ((user == 0) & (!console)) if ((user == 0) && (!console))
return -EBUSY; return -EBUSY;
/* If the USB device is gone, we don't accept new opens */ /* If the USB device is gone, we don't accept new opens */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册