* [PATCH 0/3] tty: eliminate 64 byte stack buffers passed to tty_name
@ 2015-03-31 13:55 Rasmus Villemoes
2015-03-31 13:55 ` [PATCH 1/3] tty: constify return type of tty_name Rasmus Villemoes
` (3 more replies)
0 siblings, 4 replies; 7+ messages in thread
From: Rasmus Villemoes @ 2015-03-31 13:55 UTC (permalink / raw)
To: Dmitry Torokhov, Greg Kroah-Hartman, Jiri Slaby, Mikael Starvik,
Jesper Nilsson
Cc: Rasmus Villemoes, linux-input, linux-kernel, linux-cris-kernel,
linux-serial
All users of tty_name pass the return value directly to a printf
function, so we might as well use tty->name directly instead of
copying it to a user-supplied (stack) buffer.
allmodconfig compile-tested only.
Rasmus Villemoes (3):
tty: constify return type of tty_name
tty: return tty->name directly from tty_name
tty: remove buf parameter from tty_name()
drivers/input/serio/serport.c | 5 ++---
drivers/tty/amiserial.c | 8 ++------
drivers/tty/cyclades.c | 8 ++------
drivers/tty/n_gsm.c | 3 +--
drivers/tty/n_tty.c | 7 ++-----
drivers/tty/serial/crisv10.c | 8 ++------
drivers/tty/serial/serial_core.c | 4 +---
drivers/tty/tty_io.c | 34 +++++++++++++---------------------
drivers/tty/tty_ioctl.c | 4 +---
drivers/tty/tty_ldisc.c | 8 +++-----
include/linux/tty.h | 2 +-
11 files changed, 30 insertions(+), 61 deletions(-)
--
2.1.3
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 1/3] tty: constify return type of tty_name
2015-03-31 13:55 [PATCH 0/3] tty: eliminate 64 byte stack buffers passed to tty_name Rasmus Villemoes
@ 2015-03-31 13:55 ` Rasmus Villemoes
2015-03-31 13:55 ` [PATCH 2/3] tty: return tty->name directly from tty_name Rasmus Villemoes
` (2 subsequent siblings)
3 siblings, 0 replies; 7+ messages in thread
From: Rasmus Villemoes @ 2015-03-31 13:55 UTC (permalink / raw)
To: Greg Kroah-Hartman, Jiri Slaby; +Cc: Rasmus Villemoes, linux-kernel
All users of tty_name pass the result directly to a printf-like
function. This means we can actually let tty_name return the literal
"NULL tty" or tty->name directly, avoiding the strcpy and a lot of
medium-sized stack buffers. In preparation for that, make the return
type const char*.
While at it, we can also constify the tty parameter.
Signed-off-by: Rasmus Villemoes <linux@rasmusvillemoes.dk>
---
drivers/tty/tty_io.c | 2 +-
include/linux/tty.h | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c
index 2bb4dfc02873..5d4a9fd7510a 100644
--- a/drivers/tty/tty_io.c
+++ b/drivers/tty/tty_io.c
@@ -243,7 +243,7 @@ static void tty_del_file(struct file *file)
* Locking: none
*/
-char *tty_name(struct tty_struct *tty, char *buf)
+const char *tty_name(const struct tty_struct *tty, char *buf)
{
if (!tty) /* Hmm. NULL pointer. That's fun. */
strcpy(buf, "NULL tty");
diff --git a/include/linux/tty.h b/include/linux/tty.h
index 358a337af598..8771cc4faf9f 100644
--- a/include/linux/tty.h
+++ b/include/linux/tty.h
@@ -421,7 +421,7 @@ static inline struct tty_struct *tty_kref_get(struct tty_struct *tty)
extern int tty_paranoia_check(struct tty_struct *tty, struct inode *inode,
const char *routine);
-extern char *tty_name(struct tty_struct *tty, char *buf);
+extern const char *tty_name(const struct tty_struct *tty, char *buf);
extern void tty_wait_until_sent(struct tty_struct *tty, long timeout);
extern int tty_check_change(struct tty_struct *tty);
extern void __stop_tty(struct tty_struct *tty);
--
2.1.3
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 2/3] tty: return tty->name directly from tty_name
2015-03-31 13:55 [PATCH 0/3] tty: eliminate 64 byte stack buffers passed to tty_name Rasmus Villemoes
2015-03-31 13:55 ` [PATCH 1/3] tty: constify return type of tty_name Rasmus Villemoes
@ 2015-03-31 13:55 ` Rasmus Villemoes
2015-03-31 13:55 ` [PATCH 3/3] tty: remove buf parameter from tty_name() Rasmus Villemoes
2015-04-04 0:20 ` [PATCH 0/3] tty: eliminate 64 byte stack buffers passed to tty_name Peter Hurley
3 siblings, 0 replies; 7+ messages in thread
From: Rasmus Villemoes @ 2015-03-31 13:55 UTC (permalink / raw)
To: Greg Kroah-Hartman, Jiri Slaby; +Cc: Rasmus Villemoes, linux-kernel
All users of tty_name pass the return value (the provided buffer) to
some printf-like function. We can thus avoid the strcpy and, more
importantly, later remove the buf parameter completely, eliminating
the need for some 64 byte stack buffers.
Signed-off-by: Rasmus Villemoes <linux@rasmusvillemoes.dk>
---
drivers/tty/tty_io.c | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c
index 5d4a9fd7510a..ab549e7bdaa8 100644
--- a/drivers/tty/tty_io.c
+++ b/drivers/tty/tty_io.c
@@ -235,7 +235,7 @@ static void tty_del_file(struct file *file)
/**
* tty_name - return tty naming
* @tty: tty structure
- * @buf: buffer for output
+ * @buf: unused
*
* Convert a tty structure into a name. The name reflects the kernel
* naming policy and if udev is in use may not reflect user space
@@ -246,10 +246,8 @@ static void tty_del_file(struct file *file)
const char *tty_name(const struct tty_struct *tty, char *buf)
{
if (!tty) /* Hmm. NULL pointer. That's fun. */
- strcpy(buf, "NULL tty");
- else
- strcpy(buf, tty->name);
- return buf;
+ return "NULL tty";
+ return tty->name;
}
EXPORT_SYMBOL(tty_name);
--
2.1.3
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 3/3] tty: remove buf parameter from tty_name()
2015-03-31 13:55 [PATCH 0/3] tty: eliminate 64 byte stack buffers passed to tty_name Rasmus Villemoes
2015-03-31 13:55 ` [PATCH 1/3] tty: constify return type of tty_name Rasmus Villemoes
2015-03-31 13:55 ` [PATCH 2/3] tty: return tty->name directly from tty_name Rasmus Villemoes
@ 2015-03-31 13:55 ` Rasmus Villemoes
2015-03-31 21:40 ` Dmitry Torokhov
2015-04-07 8:57 ` Jesper Nilsson
2015-04-04 0:20 ` [PATCH 0/3] tty: eliminate 64 byte stack buffers passed to tty_name Peter Hurley
3 siblings, 2 replies; 7+ messages in thread
From: Rasmus Villemoes @ 2015-03-31 13:55 UTC (permalink / raw)
To: Dmitry Torokhov, Greg Kroah-Hartman, Jiri Slaby, Mikael Starvik,
Jesper Nilsson
Cc: Rasmus Villemoes, linux-input, linux-kernel, linux-cris-kernel,
linux-serial
tty_name no longer uses the buf parameter, so remove it along with all
the 64 byte stack buffers that used to be passed in.
Mostly generated by the coccinelle script
@depends on patch@
identifier buf;
constant C;
expression tty;
@@
- char buf[C];
<+...
- tty_name(tty, buf)
+ tty_name(tty)
...+>
allmodconfig compiles, so I'm fairly confident the stack buffers
weren't used for other purposes as well.
Signed-off-by: Rasmus Villemoes <linux@rasmusvillemoes.dk>
---
drivers/input/serio/serport.c | 5 ++---
drivers/tty/amiserial.c | 8 ++------
drivers/tty/cyclades.c | 8 ++------
drivers/tty/n_gsm.c | 3 +--
drivers/tty/n_tty.c | 7 ++-----
drivers/tty/serial/crisv10.c | 8 ++------
drivers/tty/serial/serial_core.c | 4 +---
drivers/tty/tty_io.c | 28 +++++++++++-----------------
drivers/tty/tty_ioctl.c | 4 +---
drivers/tty/tty_ldisc.c | 8 +++-----
include/linux/tty.h | 2 +-
11 files changed, 28 insertions(+), 57 deletions(-)
diff --git a/drivers/input/serio/serport.c b/drivers/input/serio/serport.c
index 69175b825346..9c927d35c1f5 100644
--- a/drivers/input/serio/serport.c
+++ b/drivers/input/serio/serport.c
@@ -167,7 +167,6 @@ static ssize_t serport_ldisc_read(struct tty_struct * tty, struct file * file, u
{
struct serport *serport = (struct serport*) tty->disc_data;
struct serio *serio;
- char name[64];
if (test_and_set_bit(SERPORT_BUSY, &serport->flags))
return -EBUSY;
@@ -177,7 +176,7 @@ static ssize_t serport_ldisc_read(struct tty_struct * tty, struct file * file, u
return -ENOMEM;
strlcpy(serio->name, "Serial port", sizeof(serio->name));
- snprintf(serio->phys, sizeof(serio->phys), "%s/serio0", tty_name(tty, name));
+ snprintf(serio->phys, sizeof(serio->phys), "%s/serio0", tty_name(tty));
serio->id = serport->id;
serio->id.type = SERIO_RS232;
serio->write = serport_serio_write;
@@ -187,7 +186,7 @@ static ssize_t serport_ldisc_read(struct tty_struct * tty, struct file * file, u
serio->dev.parent = tty->dev;
serio_register_port(serport->serio);
- printk(KERN_INFO "serio: Serial port %s\n", tty_name(tty, name));
+ printk(KERN_INFO "serio: Serial port %s\n", tty_name(tty));
wait_event_interruptible(serport->wait, test_bit(SERPORT_DEAD, &serport->flags));
serio_unregister_port(serport->serio);
diff --git a/drivers/tty/amiserial.c b/drivers/tty/amiserial.c
index b2d760055952..894d3a84e285 100644
--- a/drivers/tty/amiserial.c
+++ b/drivers/tty/amiserial.c
@@ -966,9 +966,7 @@ static void rs_throttle(struct tty_struct * tty)
struct serial_state *info = tty->driver_data;
unsigned long flags;
#ifdef SERIAL_DEBUG_THROTTLE
- char buf[64];
-
- printk("throttle %s: %d....\n", tty_name(tty, buf),
+ printk("throttle %s: %d....\n", tty_name(tty),
tty->ldisc.chars_in_buffer(tty));
#endif
@@ -991,9 +989,7 @@ static void rs_unthrottle(struct tty_struct * tty)
struct serial_state *info = tty->driver_data;
unsigned long flags;
#ifdef SERIAL_DEBUG_THROTTLE
- char buf[64];
-
- printk("unthrottle %s: %d....\n", tty_name(tty, buf),
+ printk("unthrottle %s: %d....\n", tty_name(tty),
tty->ldisc.chars_in_buffer(tty));
#endif
diff --git a/drivers/tty/cyclades.c b/drivers/tty/cyclades.c
index fd66f57390d0..87f6578c6f4a 100644
--- a/drivers/tty/cyclades.c
+++ b/drivers/tty/cyclades.c
@@ -2861,9 +2861,7 @@ static void cy_throttle(struct tty_struct *tty)
unsigned long flags;
#ifdef CY_DEBUG_THROTTLE
- char buf[64];
-
- printk(KERN_DEBUG "cyc:throttle %s: %ld...ttyC%d\n", tty_name(tty, buf),
+ printk(KERN_DEBUG "cyc:throttle %s: %ld...ttyC%d\n", tty_name(tty),
tty->ldisc.chars_in_buffer(tty), info->line);
#endif
@@ -2902,10 +2900,8 @@ static void cy_unthrottle(struct tty_struct *tty)
unsigned long flags;
#ifdef CY_DEBUG_THROTTLE
- char buf[64];
-
printk(KERN_DEBUG "cyc:unthrottle %s: %ld...ttyC%d\n",
- tty_name(tty, buf), tty_chars_in_buffer(tty), info->line);
+ tty_name(tty), tty_chars_in_buffer(tty), info->line);
#endif
if (serial_paranoia_check(info, tty->name, "cy_unthrottle"))
diff --git a/drivers/tty/n_gsm.c b/drivers/tty/n_gsm.c
index c4343764cc5b..9b6d3d5ee51c 100644
--- a/drivers/tty/n_gsm.c
+++ b/drivers/tty/n_gsm.c
@@ -2274,7 +2274,6 @@ static void gsmld_receive_buf(struct tty_struct *tty, const unsigned char *cp,
const unsigned char *dp;
char *f;
int i;
- char buf[64];
char flags = TTY_NORMAL;
if (debug & 4)
@@ -2296,7 +2295,7 @@ static void gsmld_receive_buf(struct tty_struct *tty, const unsigned char *cp,
break;
default:
WARN_ONCE(1, "%s: unknown flag %d\n",
- tty_name(tty, buf), flags);
+ tty_name(tty), flags);
break;
}
}
diff --git a/drivers/tty/n_tty.c b/drivers/tty/n_tty.c
index cf6e0f2e1331..54da8f49394d 100644
--- a/drivers/tty/n_tty.c
+++ b/drivers/tty/n_tty.c
@@ -1179,13 +1179,12 @@ static void n_tty_receive_break(struct tty_struct *tty)
static void n_tty_receive_overrun(struct tty_struct *tty)
{
struct n_tty_data *ldata = tty->disc_data;
- char buf[64];
ldata->num_overrun++;
if (time_after(jiffies, ldata->overrun_time + HZ) ||
time_after(ldata->overrun_time, jiffies)) {
printk(KERN_WARNING "%s: %d input overrun(s)\n",
- tty_name(tty, buf),
+ tty_name(tty),
ldata->num_overrun);
ldata->overrun_time = jiffies;
ldata->num_overrun = 0;
@@ -1460,8 +1459,6 @@ static void n_tty_receive_char_closing(struct tty_struct *tty, unsigned char c)
static void
n_tty_receive_char_flagged(struct tty_struct *tty, unsigned char c, char flag)
{
- char buf[64];
-
switch (flag) {
case TTY_BREAK:
n_tty_receive_break(tty);
@@ -1475,7 +1472,7 @@ n_tty_receive_char_flagged(struct tty_struct *tty, unsigned char c, char flag)
break;
default:
printk(KERN_ERR "%s: unknown flag %d\n",
- tty_name(tty, buf), flag);
+ tty_name(tty), flag);
break;
}
}
diff --git a/drivers/tty/serial/crisv10.c b/drivers/tty/serial/crisv10.c
index 0c1825b0b41d..568ea0d2d699 100644
--- a/drivers/tty/serial/crisv10.c
+++ b/drivers/tty/serial/crisv10.c
@@ -3216,9 +3216,7 @@ rs_throttle(struct tty_struct * tty)
{
struct e100_serial *info = (struct e100_serial *)tty->driver_data;
#ifdef SERIAL_DEBUG_THROTTLE
- char buf[64];
-
- printk("throttle %s: %lu....\n", tty_name(tty, buf),
+ printk("throttle %s: %lu....\n", tty_name(tty),
(unsigned long)tty->ldisc.chars_in_buffer(tty));
#endif
DFLOW(DEBUG_LOG(info->line,"rs_throttle %lu\n", tty->ldisc.chars_in_buffer(tty)));
@@ -3238,9 +3236,7 @@ rs_unthrottle(struct tty_struct * tty)
{
struct e100_serial *info = (struct e100_serial *)tty->driver_data;
#ifdef SERIAL_DEBUG_THROTTLE
- char buf[64];
-
- printk("unthrottle %s: %lu....\n", tty_name(tty, buf),
+ printk("unthrottle %s: %lu....\n", tty_name(tty),
(unsigned long)tty->ldisc.chars_in_buffer(tty));
#endif
DFLOW(DEBUG_LOG(info->line,"rs_unthrottle ldisc %d\n", tty->ldisc.chars_in_buffer(tty)));
diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c
index 6a1055ae3437..4e73b6482f0b 100644
--- a/drivers/tty/serial/serial_core.c
+++ b/drivers/tty/serial/serial_core.c
@@ -894,12 +894,10 @@ static int uart_set_info(struct tty_struct *tty, struct tty_port *port,
* need to rate-limit; it's CAP_SYS_ADMIN only.
*/
if (uport->flags & UPF_SPD_MASK) {
- char buf[64];
-
dev_notice(uport->dev,
"%s sets custom speed on %s. This is deprecated.\n",
current->comm,
- tty_name(port->tty, buf));
+ tty_name(port->tty));
}
uart_change_speed(tty, state, NULL);
}
diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c
index ab549e7bdaa8..96f948dc43a6 100644
--- a/drivers/tty/tty_io.c
+++ b/drivers/tty/tty_io.c
@@ -235,7 +235,6 @@ static void tty_del_file(struct file *file)
/**
* tty_name - return tty naming
* @tty: tty structure
- * @buf: unused
*
* Convert a tty structure into a name. The name reflects the kernel
* naming policy and if udev is in use may not reflect user space
@@ -243,7 +242,7 @@ static void tty_del_file(struct file *file)
* Locking: none
*/
-const char *tty_name(const struct tty_struct *tty, char *buf)
+const char *tty_name(const struct tty_struct *tty)
{
if (!tty) /* Hmm. NULL pointer. That's fun. */
return "NULL tty";
@@ -768,8 +767,7 @@ static void do_tty_hangup(struct work_struct *work)
void tty_hangup(struct tty_struct *tty)
{
#ifdef TTY_DEBUG_HANGUP
- char buf[64];
- printk(KERN_DEBUG "%s hangup...\n", tty_name(tty, buf));
+ printk(KERN_DEBUG "%s hangup...\n", tty_name(tty));
#endif
schedule_work(&tty->hangup_work);
}
@@ -788,9 +786,7 @@ EXPORT_SYMBOL(tty_hangup);
void tty_vhangup(struct tty_struct *tty)
{
#ifdef TTY_DEBUG_HANGUP
- char buf[64];
-
- printk(KERN_DEBUG "%s vhangup...\n", tty_name(tty, buf));
+ printk(KERN_DEBUG "%s vhangup...\n", tty_name(tty));
#endif
__tty_hangup(tty, 0);
}
@@ -829,9 +825,7 @@ void tty_vhangup_self(void)
static void tty_vhangup_session(struct tty_struct *tty)
{
#ifdef TTY_DEBUG_HANGUP
- char buf[64];
-
- printk(KERN_DEBUG "%s vhangup session...\n", tty_name(tty, buf));
+ printk(KERN_DEBUG "%s vhangup session...\n", tty_name(tty));
#endif
__tty_hangup(tty, 1);
}
@@ -1761,7 +1755,6 @@ int tty_release(struct inode *inode, struct file *filp)
struct tty_struct *o_tty = NULL;
int do_sleep, final;
int idx;
- char buf[64];
long timeout = 0;
int once = 1;
@@ -1785,7 +1778,7 @@ int tty_release(struct inode *inode, struct file *filp)
#ifdef TTY_DEBUG_HANGUP
printk(KERN_DEBUG "%s: %s (tty count=%d)...\n", __func__,
- tty_name(tty, buf), tty->count);
+ tty_name(tty), tty->count);
#endif
if (tty->ops->close)
@@ -1836,7 +1829,7 @@ int tty_release(struct inode *inode, struct file *filp)
if (once) {
once = 0;
printk(KERN_WARNING "%s: %s: read/write wait queue active!\n",
- __func__, tty_name(tty, buf));
+ __func__, tty_name(tty));
}
schedule_timeout_killable(timeout);
if (timeout < 120 * HZ)
@@ -1848,13 +1841,13 @@ int tty_release(struct inode *inode, struct file *filp)
if (o_tty) {
if (--o_tty->count < 0) {
printk(KERN_WARNING "%s: bad pty slave count (%d) for %s\n",
- __func__, o_tty->count, tty_name(o_tty, buf));
+ __func__, o_tty->count, tty_name(o_tty));
o_tty->count = 0;
}
}
if (--tty->count < 0) {
printk(KERN_WARNING "%s: bad tty->count (%d) for %s\n",
- __func__, tty->count, tty_name(tty, buf));
+ __func__, tty->count, tty_name(tty));
tty->count = 0;
}
@@ -1897,7 +1890,7 @@ int tty_release(struct inode *inode, struct file *filp)
return 0;
#ifdef TTY_DEBUG_HANGUP
- printk(KERN_DEBUG "%s: %s: final close\n", __func__, tty_name(tty, buf));
+ printk(KERN_DEBUG "%s: %s: final close\n", __func__, tty_name(tty));
#endif
/*
* Ask the line discipline code to release its structures
@@ -1908,7 +1901,8 @@ int tty_release(struct inode *inode, struct file *filp)
tty_flush_works(tty);
#ifdef TTY_DEBUG_HANGUP
- printk(KERN_DEBUG "%s: %s: freeing structure...\n", __func__, tty_name(tty, buf));
+ printk(KERN_DEBUG "%s: %s: freeing structure...\n", __func__,
+ tty_name(tty));
#endif
/*
* The release_tty function takes care of the details of clearing
diff --git a/drivers/tty/tty_ioctl.c b/drivers/tty/tty_ioctl.c
index 632fc8152061..e590207e9c0a 100644
--- a/drivers/tty/tty_ioctl.c
+++ b/drivers/tty/tty_ioctl.c
@@ -211,9 +211,7 @@ int tty_unthrottle_safe(struct tty_struct *tty)
void tty_wait_until_sent(struct tty_struct *tty, long timeout)
{
#ifdef TTY_DEBUG_WAIT_UNTIL_SENT
- char buf[64];
-
- printk(KERN_DEBUG "%s wait until sent...\n", tty_name(tty, buf));
+ printk(KERN_DEBUG "%s wait until sent...\n", tty_name(tty));
#endif
if (!timeout)
timeout = MAX_SCHEDULE_TIMEOUT;
diff --git a/drivers/tty/tty_ldisc.c b/drivers/tty/tty_ldisc.c
index 3737f55272d2..c07fb5d9bcf9 100644
--- a/drivers/tty/tty_ldisc.c
+++ b/drivers/tty/tty_ldisc.c
@@ -22,9 +22,8 @@
#undef LDISC_DEBUG_HANGUP
#ifdef LDISC_DEBUG_HANGUP
-#define tty_ldisc_debug(tty, f, args...) ({ \
- char __b[64]; \
- printk(KERN_DEBUG "%s: %s: " f, __func__, tty_name(tty, __b), ##args); \
+#define tty_ldisc_debug(tty, f, args...) ({ \
+ printk(KERN_DEBUG "%s: %s: " f, __func__, tty_name(tty), ##args); \
})
#else
#define tty_ldisc_debug(tty, f, args...)
@@ -483,7 +482,6 @@ static void tty_ldisc_close(struct tty_struct *tty, struct tty_ldisc *ld)
static void tty_ldisc_restore(struct tty_struct *tty, struct tty_ldisc *old)
{
- char buf[64];
struct tty_ldisc *new_ldisc;
int r;
@@ -504,7 +502,7 @@ static void tty_ldisc_restore(struct tty_struct *tty, struct tty_ldisc *old)
if (r < 0)
panic("Couldn't open N_TTY ldisc for "
"%s --- error %d.",
- tty_name(tty, buf), r);
+ tty_name(tty), r);
}
}
diff --git a/include/linux/tty.h b/include/linux/tty.h
index 8771cc4faf9f..f0fc326cf08e 100644
--- a/include/linux/tty.h
+++ b/include/linux/tty.h
@@ -421,7 +421,7 @@ static inline struct tty_struct *tty_kref_get(struct tty_struct *tty)
extern int tty_paranoia_check(struct tty_struct *tty, struct inode *inode,
const char *routine);
-extern const char *tty_name(const struct tty_struct *tty, char *buf);
+extern const char *tty_name(const struct tty_struct *tty);
extern void tty_wait_until_sent(struct tty_struct *tty, long timeout);
extern int tty_check_change(struct tty_struct *tty);
extern void __stop_tty(struct tty_struct *tty);
--
2.1.3
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH 3/3] tty: remove buf parameter from tty_name()
2015-03-31 13:55 ` [PATCH 3/3] tty: remove buf parameter from tty_name() Rasmus Villemoes
@ 2015-03-31 21:40 ` Dmitry Torokhov
2015-04-07 8:57 ` Jesper Nilsson
1 sibling, 0 replies; 7+ messages in thread
From: Dmitry Torokhov @ 2015-03-31 21:40 UTC (permalink / raw)
To: Rasmus Villemoes
Cc: Greg Kroah-Hartman, Jiri Slaby, Mikael Starvik, Jesper Nilsson,
linux-input, linux-kernel, linux-cris-kernel, linux-serial
On Tue, Mar 31, 2015 at 03:55:59PM +0200, Rasmus Villemoes wrote:
> tty_name no longer uses the buf parameter, so remove it along with all
> the 64 byte stack buffers that used to be passed in.
>
> Mostly generated by the coccinelle script
>
> @depends on patch@
> identifier buf;
> constant C;
> expression tty;
> @@
> - char buf[C];
> <+...
> - tty_name(tty, buf)
> + tty_name(tty)
> ...+>
>
> allmodconfig compiles, so I'm fairly confident the stack buffers
> weren't used for other purposes as well.
>
> Signed-off-by: Rasmus Villemoes <linux@rasmusvillemoes.dk>
> ---
> drivers/input/serio/serport.c | 5 ++---
I am fine with serport changes.
Acked-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Thanks.
> drivers/tty/amiserial.c | 8 ++------
> drivers/tty/cyclades.c | 8 ++------
> drivers/tty/n_gsm.c | 3 +--
> drivers/tty/n_tty.c | 7 ++-----
> drivers/tty/serial/crisv10.c | 8 ++------
> drivers/tty/serial/serial_core.c | 4 +---
> drivers/tty/tty_io.c | 28 +++++++++++-----------------
> drivers/tty/tty_ioctl.c | 4 +---
> drivers/tty/tty_ldisc.c | 8 +++-----
> include/linux/tty.h | 2 +-
> 11 files changed, 28 insertions(+), 57 deletions(-)
>
> diff --git a/drivers/input/serio/serport.c b/drivers/input/serio/serport.c
> index 69175b825346..9c927d35c1f5 100644
> --- a/drivers/input/serio/serport.c
> +++ b/drivers/input/serio/serport.c
> @@ -167,7 +167,6 @@ static ssize_t serport_ldisc_read(struct tty_struct * tty, struct file * file, u
> {
> struct serport *serport = (struct serport*) tty->disc_data;
> struct serio *serio;
> - char name[64];
>
> if (test_and_set_bit(SERPORT_BUSY, &serport->flags))
> return -EBUSY;
> @@ -177,7 +176,7 @@ static ssize_t serport_ldisc_read(struct tty_struct * tty, struct file * file, u
> return -ENOMEM;
>
> strlcpy(serio->name, "Serial port", sizeof(serio->name));
> - snprintf(serio->phys, sizeof(serio->phys), "%s/serio0", tty_name(tty, name));
> + snprintf(serio->phys, sizeof(serio->phys), "%s/serio0", tty_name(tty));
> serio->id = serport->id;
> serio->id.type = SERIO_RS232;
> serio->write = serport_serio_write;
> @@ -187,7 +186,7 @@ static ssize_t serport_ldisc_read(struct tty_struct * tty, struct file * file, u
> serio->dev.parent = tty->dev;
>
> serio_register_port(serport->serio);
> - printk(KERN_INFO "serio: Serial port %s\n", tty_name(tty, name));
> + printk(KERN_INFO "serio: Serial port %s\n", tty_name(tty));
>
> wait_event_interruptible(serport->wait, test_bit(SERPORT_DEAD, &serport->flags));
> serio_unregister_port(serport->serio);
> diff --git a/drivers/tty/amiserial.c b/drivers/tty/amiserial.c
> index b2d760055952..894d3a84e285 100644
> --- a/drivers/tty/amiserial.c
> +++ b/drivers/tty/amiserial.c
> @@ -966,9 +966,7 @@ static void rs_throttle(struct tty_struct * tty)
> struct serial_state *info = tty->driver_data;
> unsigned long flags;
> #ifdef SERIAL_DEBUG_THROTTLE
> - char buf[64];
> -
> - printk("throttle %s: %d....\n", tty_name(tty, buf),
> + printk("throttle %s: %d....\n", tty_name(tty),
> tty->ldisc.chars_in_buffer(tty));
> #endif
>
> @@ -991,9 +989,7 @@ static void rs_unthrottle(struct tty_struct * tty)
> struct serial_state *info = tty->driver_data;
> unsigned long flags;
> #ifdef SERIAL_DEBUG_THROTTLE
> - char buf[64];
> -
> - printk("unthrottle %s: %d....\n", tty_name(tty, buf),
> + printk("unthrottle %s: %d....\n", tty_name(tty),
> tty->ldisc.chars_in_buffer(tty));
> #endif
>
> diff --git a/drivers/tty/cyclades.c b/drivers/tty/cyclades.c
> index fd66f57390d0..87f6578c6f4a 100644
> --- a/drivers/tty/cyclades.c
> +++ b/drivers/tty/cyclades.c
> @@ -2861,9 +2861,7 @@ static void cy_throttle(struct tty_struct *tty)
> unsigned long flags;
>
> #ifdef CY_DEBUG_THROTTLE
> - char buf[64];
> -
> - printk(KERN_DEBUG "cyc:throttle %s: %ld...ttyC%d\n", tty_name(tty, buf),
> + printk(KERN_DEBUG "cyc:throttle %s: %ld...ttyC%d\n", tty_name(tty),
> tty->ldisc.chars_in_buffer(tty), info->line);
> #endif
>
> @@ -2902,10 +2900,8 @@ static void cy_unthrottle(struct tty_struct *tty)
> unsigned long flags;
>
> #ifdef CY_DEBUG_THROTTLE
> - char buf[64];
> -
> printk(KERN_DEBUG "cyc:unthrottle %s: %ld...ttyC%d\n",
> - tty_name(tty, buf), tty_chars_in_buffer(tty), info->line);
> + tty_name(tty), tty_chars_in_buffer(tty), info->line);
> #endif
>
> if (serial_paranoia_check(info, tty->name, "cy_unthrottle"))
> diff --git a/drivers/tty/n_gsm.c b/drivers/tty/n_gsm.c
> index c4343764cc5b..9b6d3d5ee51c 100644
> --- a/drivers/tty/n_gsm.c
> +++ b/drivers/tty/n_gsm.c
> @@ -2274,7 +2274,6 @@ static void gsmld_receive_buf(struct tty_struct *tty, const unsigned char *cp,
> const unsigned char *dp;
> char *f;
> int i;
> - char buf[64];
> char flags = TTY_NORMAL;
>
> if (debug & 4)
> @@ -2296,7 +2295,7 @@ static void gsmld_receive_buf(struct tty_struct *tty, const unsigned char *cp,
> break;
> default:
> WARN_ONCE(1, "%s: unknown flag %d\n",
> - tty_name(tty, buf), flags);
> + tty_name(tty), flags);
> break;
> }
> }
> diff --git a/drivers/tty/n_tty.c b/drivers/tty/n_tty.c
> index cf6e0f2e1331..54da8f49394d 100644
> --- a/drivers/tty/n_tty.c
> +++ b/drivers/tty/n_tty.c
> @@ -1179,13 +1179,12 @@ static void n_tty_receive_break(struct tty_struct *tty)
> static void n_tty_receive_overrun(struct tty_struct *tty)
> {
> struct n_tty_data *ldata = tty->disc_data;
> - char buf[64];
>
> ldata->num_overrun++;
> if (time_after(jiffies, ldata->overrun_time + HZ) ||
> time_after(ldata->overrun_time, jiffies)) {
> printk(KERN_WARNING "%s: %d input overrun(s)\n",
> - tty_name(tty, buf),
> + tty_name(tty),
> ldata->num_overrun);
> ldata->overrun_time = jiffies;
> ldata->num_overrun = 0;
> @@ -1460,8 +1459,6 @@ static void n_tty_receive_char_closing(struct tty_struct *tty, unsigned char c)
> static void
> n_tty_receive_char_flagged(struct tty_struct *tty, unsigned char c, char flag)
> {
> - char buf[64];
> -
> switch (flag) {
> case TTY_BREAK:
> n_tty_receive_break(tty);
> @@ -1475,7 +1472,7 @@ n_tty_receive_char_flagged(struct tty_struct *tty, unsigned char c, char flag)
> break;
> default:
> printk(KERN_ERR "%s: unknown flag %d\n",
> - tty_name(tty, buf), flag);
> + tty_name(tty), flag);
> break;
> }
> }
> diff --git a/drivers/tty/serial/crisv10.c b/drivers/tty/serial/crisv10.c
> index 0c1825b0b41d..568ea0d2d699 100644
> --- a/drivers/tty/serial/crisv10.c
> +++ b/drivers/tty/serial/crisv10.c
> @@ -3216,9 +3216,7 @@ rs_throttle(struct tty_struct * tty)
> {
> struct e100_serial *info = (struct e100_serial *)tty->driver_data;
> #ifdef SERIAL_DEBUG_THROTTLE
> - char buf[64];
> -
> - printk("throttle %s: %lu....\n", tty_name(tty, buf),
> + printk("throttle %s: %lu....\n", tty_name(tty),
> (unsigned long)tty->ldisc.chars_in_buffer(tty));
> #endif
> DFLOW(DEBUG_LOG(info->line,"rs_throttle %lu\n", tty->ldisc.chars_in_buffer(tty)));
> @@ -3238,9 +3236,7 @@ rs_unthrottle(struct tty_struct * tty)
> {
> struct e100_serial *info = (struct e100_serial *)tty->driver_data;
> #ifdef SERIAL_DEBUG_THROTTLE
> - char buf[64];
> -
> - printk("unthrottle %s: %lu....\n", tty_name(tty, buf),
> + printk("unthrottle %s: %lu....\n", tty_name(tty),
> (unsigned long)tty->ldisc.chars_in_buffer(tty));
> #endif
> DFLOW(DEBUG_LOG(info->line,"rs_unthrottle ldisc %d\n", tty->ldisc.chars_in_buffer(tty)));
> diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c
> index 6a1055ae3437..4e73b6482f0b 100644
> --- a/drivers/tty/serial/serial_core.c
> +++ b/drivers/tty/serial/serial_core.c
> @@ -894,12 +894,10 @@ static int uart_set_info(struct tty_struct *tty, struct tty_port *port,
> * need to rate-limit; it's CAP_SYS_ADMIN only.
> */
> if (uport->flags & UPF_SPD_MASK) {
> - char buf[64];
> -
> dev_notice(uport->dev,
> "%s sets custom speed on %s. This is deprecated.\n",
> current->comm,
> - tty_name(port->tty, buf));
> + tty_name(port->tty));
> }
> uart_change_speed(tty, state, NULL);
> }
> diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c
> index ab549e7bdaa8..96f948dc43a6 100644
> --- a/drivers/tty/tty_io.c
> +++ b/drivers/tty/tty_io.c
> @@ -235,7 +235,6 @@ static void tty_del_file(struct file *file)
> /**
> * tty_name - return tty naming
> * @tty: tty structure
> - * @buf: unused
> *
> * Convert a tty structure into a name. The name reflects the kernel
> * naming policy and if udev is in use may not reflect user space
> @@ -243,7 +242,7 @@ static void tty_del_file(struct file *file)
> * Locking: none
> */
>
> -const char *tty_name(const struct tty_struct *tty, char *buf)
> +const char *tty_name(const struct tty_struct *tty)
> {
> if (!tty) /* Hmm. NULL pointer. That's fun. */
> return "NULL tty";
> @@ -768,8 +767,7 @@ static void do_tty_hangup(struct work_struct *work)
> void tty_hangup(struct tty_struct *tty)
> {
> #ifdef TTY_DEBUG_HANGUP
> - char buf[64];
> - printk(KERN_DEBUG "%s hangup...\n", tty_name(tty, buf));
> + printk(KERN_DEBUG "%s hangup...\n", tty_name(tty));
> #endif
> schedule_work(&tty->hangup_work);
> }
> @@ -788,9 +786,7 @@ EXPORT_SYMBOL(tty_hangup);
> void tty_vhangup(struct tty_struct *tty)
> {
> #ifdef TTY_DEBUG_HANGUP
> - char buf[64];
> -
> - printk(KERN_DEBUG "%s vhangup...\n", tty_name(tty, buf));
> + printk(KERN_DEBUG "%s vhangup...\n", tty_name(tty));
> #endif
> __tty_hangup(tty, 0);
> }
> @@ -829,9 +825,7 @@ void tty_vhangup_self(void)
> static void tty_vhangup_session(struct tty_struct *tty)
> {
> #ifdef TTY_DEBUG_HANGUP
> - char buf[64];
> -
> - printk(KERN_DEBUG "%s vhangup session...\n", tty_name(tty, buf));
> + printk(KERN_DEBUG "%s vhangup session...\n", tty_name(tty));
> #endif
> __tty_hangup(tty, 1);
> }
> @@ -1761,7 +1755,6 @@ int tty_release(struct inode *inode, struct file *filp)
> struct tty_struct *o_tty = NULL;
> int do_sleep, final;
> int idx;
> - char buf[64];
> long timeout = 0;
> int once = 1;
>
> @@ -1785,7 +1778,7 @@ int tty_release(struct inode *inode, struct file *filp)
>
> #ifdef TTY_DEBUG_HANGUP
> printk(KERN_DEBUG "%s: %s (tty count=%d)...\n", __func__,
> - tty_name(tty, buf), tty->count);
> + tty_name(tty), tty->count);
> #endif
>
> if (tty->ops->close)
> @@ -1836,7 +1829,7 @@ int tty_release(struct inode *inode, struct file *filp)
> if (once) {
> once = 0;
> printk(KERN_WARNING "%s: %s: read/write wait queue active!\n",
> - __func__, tty_name(tty, buf));
> + __func__, tty_name(tty));
> }
> schedule_timeout_killable(timeout);
> if (timeout < 120 * HZ)
> @@ -1848,13 +1841,13 @@ int tty_release(struct inode *inode, struct file *filp)
> if (o_tty) {
> if (--o_tty->count < 0) {
> printk(KERN_WARNING "%s: bad pty slave count (%d) for %s\n",
> - __func__, o_tty->count, tty_name(o_tty, buf));
> + __func__, o_tty->count, tty_name(o_tty));
> o_tty->count = 0;
> }
> }
> if (--tty->count < 0) {
> printk(KERN_WARNING "%s: bad tty->count (%d) for %s\n",
> - __func__, tty->count, tty_name(tty, buf));
> + __func__, tty->count, tty_name(tty));
> tty->count = 0;
> }
>
> @@ -1897,7 +1890,7 @@ int tty_release(struct inode *inode, struct file *filp)
> return 0;
>
> #ifdef TTY_DEBUG_HANGUP
> - printk(KERN_DEBUG "%s: %s: final close\n", __func__, tty_name(tty, buf));
> + printk(KERN_DEBUG "%s: %s: final close\n", __func__, tty_name(tty));
> #endif
> /*
> * Ask the line discipline code to release its structures
> @@ -1908,7 +1901,8 @@ int tty_release(struct inode *inode, struct file *filp)
> tty_flush_works(tty);
>
> #ifdef TTY_DEBUG_HANGUP
> - printk(KERN_DEBUG "%s: %s: freeing structure...\n", __func__, tty_name(tty, buf));
> + printk(KERN_DEBUG "%s: %s: freeing structure...\n", __func__,
> + tty_name(tty));
> #endif
> /*
> * The release_tty function takes care of the details of clearing
> diff --git a/drivers/tty/tty_ioctl.c b/drivers/tty/tty_ioctl.c
> index 632fc8152061..e590207e9c0a 100644
> --- a/drivers/tty/tty_ioctl.c
> +++ b/drivers/tty/tty_ioctl.c
> @@ -211,9 +211,7 @@ int tty_unthrottle_safe(struct tty_struct *tty)
> void tty_wait_until_sent(struct tty_struct *tty, long timeout)
> {
> #ifdef TTY_DEBUG_WAIT_UNTIL_SENT
> - char buf[64];
> -
> - printk(KERN_DEBUG "%s wait until sent...\n", tty_name(tty, buf));
> + printk(KERN_DEBUG "%s wait until sent...\n", tty_name(tty));
> #endif
> if (!timeout)
> timeout = MAX_SCHEDULE_TIMEOUT;
> diff --git a/drivers/tty/tty_ldisc.c b/drivers/tty/tty_ldisc.c
> index 3737f55272d2..c07fb5d9bcf9 100644
> --- a/drivers/tty/tty_ldisc.c
> +++ b/drivers/tty/tty_ldisc.c
> @@ -22,9 +22,8 @@
> #undef LDISC_DEBUG_HANGUP
>
> #ifdef LDISC_DEBUG_HANGUP
> -#define tty_ldisc_debug(tty, f, args...) ({ \
> - char __b[64]; \
> - printk(KERN_DEBUG "%s: %s: " f, __func__, tty_name(tty, __b), ##args); \
> +#define tty_ldisc_debug(tty, f, args...) ({ \
> + printk(KERN_DEBUG "%s: %s: " f, __func__, tty_name(tty), ##args); \
> })
> #else
> #define tty_ldisc_debug(tty, f, args...)
> @@ -483,7 +482,6 @@ static void tty_ldisc_close(struct tty_struct *tty, struct tty_ldisc *ld)
>
> static void tty_ldisc_restore(struct tty_struct *tty, struct tty_ldisc *old)
> {
> - char buf[64];
> struct tty_ldisc *new_ldisc;
> int r;
>
> @@ -504,7 +502,7 @@ static void tty_ldisc_restore(struct tty_struct *tty, struct tty_ldisc *old)
> if (r < 0)
> panic("Couldn't open N_TTY ldisc for "
> "%s --- error %d.",
> - tty_name(tty, buf), r);
> + tty_name(tty), r);
> }
> }
>
> diff --git a/include/linux/tty.h b/include/linux/tty.h
> index 8771cc4faf9f..f0fc326cf08e 100644
> --- a/include/linux/tty.h
> +++ b/include/linux/tty.h
> @@ -421,7 +421,7 @@ static inline struct tty_struct *tty_kref_get(struct tty_struct *tty)
>
> extern int tty_paranoia_check(struct tty_struct *tty, struct inode *inode,
> const char *routine);
> -extern const char *tty_name(const struct tty_struct *tty, char *buf);
> +extern const char *tty_name(const struct tty_struct *tty);
> extern void tty_wait_until_sent(struct tty_struct *tty, long timeout);
> extern int tty_check_change(struct tty_struct *tty);
> extern void __stop_tty(struct tty_struct *tty);
> --
> 2.1.3
>
--
Dmitry
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 0/3] tty: eliminate 64 byte stack buffers passed to tty_name
2015-03-31 13:55 [PATCH 0/3] tty: eliminate 64 byte stack buffers passed to tty_name Rasmus Villemoes
` (2 preceding siblings ...)
2015-03-31 13:55 ` [PATCH 3/3] tty: remove buf parameter from tty_name() Rasmus Villemoes
@ 2015-04-04 0:20 ` Peter Hurley
3 siblings, 0 replies; 7+ messages in thread
From: Peter Hurley @ 2015-04-04 0:20 UTC (permalink / raw)
To: Rasmus Villemoes, Greg Kroah-Hartman
Cc: Dmitry Torokhov, Jiri Slaby, Mikael Starvik, Jesper Nilsson,
linux-input, linux-kernel, linux-cris-kernel, linux-serial
On 03/31/2015 09:55 AM, Rasmus Villemoes wrote:
> All users of tty_name pass the return value directly to a printf
> function, so we might as well use tty->name directly instead of
> copying it to a user-supplied (stack) buffer.
Reviewed-by: Peter Hurley <peter@hurleysoftware.com>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 3/3] tty: remove buf parameter from tty_name()
2015-03-31 13:55 ` [PATCH 3/3] tty: remove buf parameter from tty_name() Rasmus Villemoes
2015-03-31 21:40 ` Dmitry Torokhov
@ 2015-04-07 8:57 ` Jesper Nilsson
1 sibling, 0 replies; 7+ messages in thread
From: Jesper Nilsson @ 2015-04-07 8:57 UTC (permalink / raw)
To: Rasmus Villemoes
Cc: Dmitry Torokhov, Greg Kroah-Hartman, Jiri Slaby, Mikael Starvik,
Jesper Nilsson, linux-input, linux-kernel, linux-cris-kernel,
linux-serial
On Tue, Mar 31, 2015 at 03:55:59PM +0200, Rasmus Villemoes wrote:
> tty_name no longer uses the buf parameter, so remove it along with all
> the 64 byte stack buffers that used to be passed in.
>
> Mostly generated by the coccinelle script
>
> @depends on patch@
> identifier buf;
> constant C;
> expression tty;
> @@
> - char buf[C];
> <+...
> - tty_name(tty, buf)
> + tty_name(tty)
> ...+>
>
> allmodconfig compiles, so I'm fairly confident the stack buffers
> weren't used for other purposes as well.
>
> Signed-off-by: Rasmus Villemoes <linux@rasmusvillemoes.dk>
For the CRISv10 driver:
Acked-by: Jesper Nilsson <jesper.nilsson@axis.com>
/^JN - Jesper Nilsson
--
Jesper Nilsson -- jesper.nilsson@axis.com
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2015-04-07 8:57 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-03-31 13:55 [PATCH 0/3] tty: eliminate 64 byte stack buffers passed to tty_name Rasmus Villemoes
2015-03-31 13:55 ` [PATCH 1/3] tty: constify return type of tty_name Rasmus Villemoes
2015-03-31 13:55 ` [PATCH 2/3] tty: return tty->name directly from tty_name Rasmus Villemoes
2015-03-31 13:55 ` [PATCH 3/3] tty: remove buf parameter from tty_name() Rasmus Villemoes
2015-03-31 21:40 ` Dmitry Torokhov
2015-04-07 8:57 ` Jesper Nilsson
2015-04-04 0:20 ` [PATCH 0/3] tty: eliminate 64 byte stack buffers passed to tty_name Peter Hurley
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).