|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] Redundant lstats in libxl_pvusb.c
>>> On 4/4/2016 at 11:07 PM, in message
<22274.33583.712655.413448@xxxxxxxxxxxxxxxxxxxxxxxx>, Ian Jackson
<Ian.Jackson@xxxxxxxxxxxxx> wrote:
> In libxl_usb.c, usbintf_get_drvpath calls stat(2) on the driver sysfs
> path, and then realpath on the same path.
It's true. This could be done by calling realpath only. Will correct.
>
> And bind_usbintf calls stat(2) on the driver directory path, and then
> open(2) on a file in that directory.
It's not true. It calls stat(2) on a file in driver path (driver/interface),
and open(2) on another file in that driver path (driver/bind).
Chunyan
>
> It seems to be that in both cases, libxl could simply directly access
> the target object. Ie, it could always call realpath, and always call
> open. Appropriate error handling would deal with the cases currently
> dealt with by the stat.
>
> Am I wrong about this ?
>
> I'm prompted to look at this by Coverity, Coverity thinks that this
> stat-then-realpath, or stat-then-open, might be a TOCTOU security
> problem. I think it's wrong, but it would be nice to tidy up the code
> and eliminate these complaints.
>
> If I am right, I'd appreciate patch(es). They should mention
> CID: 1358112
> CID: 1358111
> for these two functions, respectively.
>
> Thanks,
> Ian.
>
> > *** CID 1358112: Security best practices violations (TOCTOU)
> > /tools/libxl/libxl_pvusb.c: 995 in usbintf_get_drvpath()
> > 989 spath = GCSPRINTF(SYSFS_USB_DEV "/%s/driver", intf);
> > 990
> > 991 r = lstat(spath, &st);
> > 992 if (r == 0) {
> > 993 /* Find the canonical path to the driver. */
> > 994 dp = libxl__zalloc(gc, PATH_MAX);
> > >>> CID 1358112: Security best practices violations (TOCTOU)
> > >>> Calling function "realpath" that uses "spath" after a check
> > >>> function.
> This can cause a time-of-check, time-of-use race condition.
> > 995 dp = realpath(spath, dp);
> > 996 if (!dp) {
> > 997 LOGE(ERROR, "get realpath failed: '%s'", spath);
> > 998 return ERROR_FAIL;
> > 999 }
> > 1000 } else if (errno == ENOENT) {
>
> > *** CID 1358111: Security best practices violations (TOCTOU)
> > /tools/libxl/libxl_pvusb.c: 1061 in bind_usbintf()
> > 1055 return 0;
> > 1056 if (r < 0 && errno != ENOENT)
> > 1057 return ERROR_FAIL;
> > 1058
> > 1059 path = GCSPRINTF("%s/bind", drvpath);
> > 1060
> > >>> CID 1358111: Security best practices violations (TOCTOU)
> > >>> Calling function "open" that uses "path" after a check function.
> > >>> This
> can cause a time-of-check, time-of-use race condition.
> > 1061 fd = open(path, O_WRONLY);
> > 1062 if (fd < 0) {
> > 1063 LOGE(ERROR, "open file failed: '%s'", path);
> > 1064 rc = ERROR_FAIL;
> > 1065 goto out;
> > 1066 }
>
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |