aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNikitas Angelinas <nikitas.angelinas@gmail.com>2017-07-29 23:36:36 -0400
committerPetr Mladek <pmladek@suse.com>2017-08-15 10:28:16 -0400
commit077a1cc06f72f95efd077d433993c16191008e47 (patch)
tree5d1c7194b36b9a05315c1f12e6cba42aa792bcfa
parent5a814231ae3d4f248a8ecb668a072a1da471c656 (diff)
printk: Clean up do_syslog() error handling
The error variable in do_syslog() is preemptively set to the error code before the error condition is checked, and then set to 0 if the error condition is not encountered. This is not necessary, as it is likely simpler to return immediately upon encountering the error condition. A redundant set of the error variable to 0 is also removed. This patch has been build-tested on x86_64, but not tested for functionality. Link: http://lkml.kernel.org/r/20170730033636.GA935@vostro Cc: Steven Rostedt <rostedt@goodmis.org> Cc: linux-kernel@vger.kernel.org Signed-off-by: Nikitas Angelinas <nikitas.angelinas@gmail.com> Reviewed-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com> Signed-off-by: Petr Mladek <pmladek@suse.com>
-rw-r--r--kernel/printk/printk.c35
1 files changed, 12 insertions, 23 deletions
diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c
index 87f1a8f4e0f9..cfd9ab1b80c5 100644
--- a/kernel/printk/printk.c
+++ b/kernel/printk/printk.c
@@ -1435,7 +1435,7 @@ int do_syslog(int type, char __user *buf, int len, int source)
1435 1435
1436 error = check_syslog_permissions(type, source); 1436 error = check_syslog_permissions(type, source);
1437 if (error) 1437 if (error)
1438 goto out; 1438 return error;
1439 1439
1440 switch (type) { 1440 switch (type) {
1441 case SYSLOG_ACTION_CLOSE: /* Close log */ 1441 case SYSLOG_ACTION_CLOSE: /* Close log */
@@ -1443,20 +1443,16 @@ int do_syslog(int type, char __user *buf, int len, int source)
1443 case SYSLOG_ACTION_OPEN: /* Open log */ 1443 case SYSLOG_ACTION_OPEN: /* Open log */
1444 break; 1444 break;
1445 case SYSLOG_ACTION_READ: /* Read from log */ 1445 case SYSLOG_ACTION_READ: /* Read from log */
1446 error = -EINVAL;
1447 if (!buf || len < 0) 1446 if (!buf || len < 0)
1448 goto out; 1447 return -EINVAL;
1449 error = 0;
1450 if (!len) 1448 if (!len)
1451 goto out; 1449 return 0;
1452 if (!access_ok(VERIFY_WRITE, buf, len)) { 1450 if (!access_ok(VERIFY_WRITE, buf, len))
1453 error = -EFAULT; 1451 return -EFAULT;
1454 goto out;
1455 }
1456 error = wait_event_interruptible(log_wait, 1452 error = wait_event_interruptible(log_wait,
1457 syslog_seq != log_next_seq); 1453 syslog_seq != log_next_seq);
1458 if (error) 1454 if (error)
1459 goto out; 1455 return error;
1460 error = syslog_print(buf, len); 1456 error = syslog_print(buf, len);
1461 break; 1457 break;
1462 /* Read/clear last kernel messages */ 1458 /* Read/clear last kernel messages */
@@ -1465,16 +1461,12 @@ int do_syslog(int type, char __user *buf, int len, int source)
1465 /* FALL THRU */ 1461 /* FALL THRU */
1466 /* Read last kernel messages */ 1462 /* Read last kernel messages */
1467 case SYSLOG_ACTION_READ_ALL: 1463 case SYSLOG_ACTION_READ_ALL:
1468 error = -EINVAL;
1469 if (!buf || len < 0) 1464 if (!buf || len < 0)
1470 goto out; 1465 return -EINVAL;
1471 error = 0;
1472 if (!len) 1466 if (!len)
1473 goto out; 1467 return 0;
1474 if (!access_ok(VERIFY_WRITE, buf, len)) { 1468 if (!access_ok(VERIFY_WRITE, buf, len))
1475 error = -EFAULT; 1469 return -EFAULT;
1476 goto out;
1477 }
1478 error = syslog_print_all(buf, len, clear); 1470 error = syslog_print_all(buf, len, clear);
1479 break; 1471 break;
1480 /* Clear ring buffer */ 1472 /* Clear ring buffer */
@@ -1496,15 +1488,13 @@ int do_syslog(int type, char __user *buf, int len, int source)
1496 break; 1488 break;
1497 /* Set level of messages printed to console */ 1489 /* Set level of messages printed to console */
1498 case SYSLOG_ACTION_CONSOLE_LEVEL: 1490 case SYSLOG_ACTION_CONSOLE_LEVEL:
1499 error = -EINVAL;
1500 if (len < 1 || len > 8) 1491 if (len < 1 || len > 8)
1501 goto out; 1492 return -EINVAL;
1502 if (len < minimum_console_loglevel) 1493 if (len < minimum_console_loglevel)
1503 len = minimum_console_loglevel; 1494 len = minimum_console_loglevel;
1504 console_loglevel = len; 1495 console_loglevel = len;
1505 /* Implicitly re-enable logging to console */ 1496 /* Implicitly re-enable logging to console */
1506 saved_console_loglevel = LOGLEVEL_DEFAULT; 1497 saved_console_loglevel = LOGLEVEL_DEFAULT;
1507 error = 0;
1508 break; 1498 break;
1509 /* Number of chars in the log buffer */ 1499 /* Number of chars in the log buffer */
1510 case SYSLOG_ACTION_SIZE_UNREAD: 1500 case SYSLOG_ACTION_SIZE_UNREAD:
@@ -1526,7 +1516,6 @@ int do_syslog(int type, char __user *buf, int len, int source)
1526 u64 seq = syslog_seq; 1516 u64 seq = syslog_seq;
1527 u32 idx = syslog_idx; 1517 u32 idx = syslog_idx;
1528 1518
1529 error = 0;
1530 while (seq < log_next_seq) { 1519 while (seq < log_next_seq) {
1531 struct printk_log *msg = log_from_idx(idx); 1520 struct printk_log *msg = log_from_idx(idx);
1532 1521
@@ -1546,7 +1535,7 @@ int do_syslog(int type, char __user *buf, int len, int source)
1546 error = -EINVAL; 1535 error = -EINVAL;
1547 break; 1536 break;
1548 } 1537 }
1549out: 1538
1550 return error; 1539 return error;
1551} 1540}
1552 1541