If the fd is invalid or interrupted by signal. -----邮件原件----- 发件人: Paolo Bonzini [mailto:pbonz...@redhat.com] 发送时间: 2019年3月21日 18:38 收件人: lizhengui; stefa...@redhat.com; mre...@redhat.com; kw...@redhat.com 抄送: qemu-bl...@nongnu.org; qemu-devel@nongnu.org; Fangyi (C); wangjie (P) 主题: Re: [PATCH] qemu-pr-helper: check the return value of fcntl in do_pr_out
On 20/03/19 15:07, Zhengui li wrote: > The function fcntl maybe return -1, which is not a unsigned type. > Unsigned type or Negative values should not do bitwise operator with > O_ACCMODE. Did you actually find a case in which the fcntl can fail? Paolo > Signed-off-by: Zhengui li <lizhen...@huawei.com> > --- > scsi/qemu-pr-helper.c | 8 +++++++- > 1 file changed, 7 insertions(+), 1 deletion(-) > > diff --git a/scsi/qemu-pr-helper.c b/scsi/qemu-pr-helper.c index > e7af637..fcbe4d9 100644 > --- a/scsi/qemu-pr-helper.c > +++ b/scsi/qemu-pr-helper.c > @@ -551,8 +551,14 @@ static int do_pr_out(int fd, const uint8_t *cdb, uint8_t > *sense, > const uint8_t *param, int sz) { > int resp_sz; > + int flags; > > - if ((fcntl(fd, F_GETFL) & O_ACCMODE) == O_RDONLY) { > + flags = fcntl(fd, F_GETFL); > + if (flags < 0) { > + return -1; > + } > + > + if (((unsigned int) flags & O_ACCMODE) == O_RDONLY) { > scsi_build_sense(sense, SENSE_CODE(INVALID_OPCODE)); > return CHECK_CONDITION; > } >