瀏覽代碼

[media] lirc_zilog: error out if buffer read bytes != chunk size

Give it a few tries, then exit. Prevents a possible endless loop
situation.

Signed-off-by: Jarod Wilson <jarod@redhat.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Jarod Wilson 14 年之前
父節點
當前提交
cc664ae026
共有 1 個文件被更改,包括 7 次插入1 次删除
  1. 7 1
      drivers/staging/lirc/lirc_zilog.c

+ 7 - 1
drivers/staging/lirc/lirc_zilog.c

@@ -897,7 +897,7 @@ static ssize_t read(struct file *filep, char *outbuf, size_t n, loff_t *ppos)
 	struct IR *ir = filep->private_data;
 	struct IR_rx *rx;
 	struct lirc_buffer *rbuf = ir->l.rbuf;
-	int ret = 0, written = 0;
+	int ret = 0, written = 0, retries = 0;
 	unsigned int m;
 	DECLARE_WAITQUEUE(wait, current);
 
@@ -950,6 +950,12 @@ static ssize_t read(struct file *filep, char *outbuf, size_t n, loff_t *ppos)
 				ret = copy_to_user((void *)outbuf+written, buf,
 						   rbuf->chunk_size);
 				written += rbuf->chunk_size;
+			} else {
+				retries++;
+			}
+			if (retries >= 5) {
+				zilog_error("Buffer read failed!\n");
+				ret = -EIO;
 			}
 		}
 	}