|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH V5 2/7] libxl_read_file_contents: add new entry to read sysfs file
Chun Yan Liu writes ("Re: [PATCH V5 2/7] libxl_read_file_contents: add new
entry to read sysfs file"):
> >>> On 6/25/2015 at 07:09 PM, in message
> <21899.57676.368102.982820@xxxxxxxxxxxxxxxxxxxxxxxx>, Ian Jackson
> <Ian.Jackson@xxxxxxxxxxxxx> wrote:
> > Chunyan Liu writes ("[PATCH V5 2/7] libxl_read_file_contents: add new
> > entry> > > Add a new entry libxl_read_sysfs_file_contents to handle sysfs
> > file
> > > specially. It would be used in later pvusb work.
> >
> > I think this still fails to detect a situation where the file is
> > unexpectedly longer than the requested size ?
>
> + } else if (feof(f)) {
> + if (rs < datalen && tolerate_shrinking_file) {
> + datalen = rs;
> + } else {
>
> If the file is bigger than the requested size, it will fall to this
> branch and report error.
I don't think this is true. I just applied your patch to my copy of
staging to see what the code looks like and saw this:
if (stab.st_size && data_r) {
data = malloc(datalen);
if (!data) goto xe;
rs = fread(data, 1, datalen, f);
if (rs != datalen) {
if (ferror(f)) {
LOGE(ERROR, "failed to read %s", filename);
goto xe;
} else if (feof(f)) {
if (rs < datalen && tolerate_shrinking_file) {
datalen = rs;
} else {
LOG(ERROR, "%s changed size while we were reading it",
filename);
goto xe;
}
} else {
abort();
}
}
}
So I think in the case of a sysfs file which is >4096 bytes:
- stat will succeed and give st_size == 4096
- fread(,,4096,) will read the first 4096 bytes and return 4096
- rs == datalen, so we don't take the `errors and special
cases' branch
- we return success having read 4096 bytes
But please feel free to explain why I'm wrong.
Thanks,
Ian.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |