* [KJ] [PATCH 2.6.12] [RESEND] /proc/tty/driver/* filtering for non
@ 2005-06-22 19:47 Daniel Smertnig
2005-06-29 10:42 ` Domen Puncer
` (7 more replies)
0 siblings, 8 replies; 9+ messages in thread
From: Daniel Smertnig @ 2005-06-22 19:47 UTC (permalink / raw)
To: kernel-janitors
[-- Attachment #1: Type: text/plain, Size: 14101 bytes --]
Only give out non-sensitive information to CAP_SYS_RAWIO users in
/proc/tty/driver/* and make it world-readable, as described in the
kernel janitors TODO:
"go through all the tty/serial drivers and make sure they don't give out
excessively useful information to non CAP_SYS_RAWIO users, then loosen
permissions. [D: http://lkml.org/lkml/2005/1/17/94]"
Only port settings (irqs, baud rate, flow control configuration, ...)
are given to ordinary users. Current port status (tx, rx, error
counters, status flags, ...) is limited to CAP_SYS_RAWIO users.
The following files where checked (should be all serial drivers which
implement the tty read_proc function):
arch/ia64/hp/sim/simserial.c
drivers/usb/serial/usb-serial.c
drivers/char/synclinkmp.c
drivers/char/istallion.c
drivers/char/amiserial.c
drivers/char/cyclades.c
drivers/char/stallion.c
drivers/char/pcmcia/synclink_cs.c
drivers/char/ip2main.c
drivers/char/synclink.c
drivers/isdn/capi/capi.c
drivers/serial/crisv10.c
drivers/serial/serial_core.c
drivers/serial/mcfserial.c
drivers/serial/68360serial.c
drivers/macintosh/macserial.c
net/irda/ircomm/ircomm_tty.c
net/bluetooth/rfcomm/tty.c
Signed-off-by: Daniel Smertnig <daniel.smertnig@gmail.com>
diff --git a/drivers/char/amiserial.c b/drivers/char/amiserial.c
--- a/drivers/char/amiserial.c
+++ b/drivers/char/amiserial.c
@@ -1876,6 +1876,17 @@ static inline int line_info(char *buf, s
info->quot = 0;
info->tty = NULL;
}
+
+ if (info->quot) {
+ ret += sprintf(buf+ret, " baud:%d",
+ state->baud_base / info->quot);
+ }
+
+ if (!capable(CAP_SYS_RAWIO)) {
+ strcat(buf, "\n");
+ return ret + 1;
+ }
+
local_irq_save(flags);
status = ciab.pra;
control = info ? info->MCR : status;
@@ -1894,11 +1905,6 @@ static inline int line_info(char *buf, s
if(!(status & SER_DCD))
strcat(stat_buf, "|CD");
- if (info->quot) {
- ret += sprintf(buf+ret, " baud:%d",
- state->baud_base / info->quot);
- }
-
ret += sprintf(buf+ret, " tx:%d rx:%d",
state->icount.tx, state->icount.rx);
diff --git a/drivers/char/cyclades.c b/drivers/char/cyclades.c
--- a/drivers/char/cyclades.c
+++ b/drivers/char/cyclades.c
@@ -5179,7 +5179,11 @@ cyclades_get_proc_info(char *buf, char *
int size;
__u32 cur_jifs = jiffies;
- size = sprintf(buf, "Dev TimeOpen BytesOut IdleOut BytesIn IdleIn Overruns Ldisc\n");
+ if (capable(CAP_SYS_RAWIO)) {
+ size = sprintf(buf, "Dev TimeOpen BytesOut IdleOut BytesIn IdleIn Overruns Ldisc\n");
+ } else {
+ size = sprintf(buf, "Dev Ldisc\n");
+ }
pos += size;
len += size;
@@ -5188,21 +5192,29 @@ cyclades_get_proc_info(char *buf, char *
for (i = 0; i < NR_PORTS && cy_port[i].line >= 0; i++) {
info = &cy_port[i];
- if (info->count)
- size = sprintf(buf+len,
- "%3d %8lu %10lu %8lu %10lu %8lu %9lu %6ld\n",
- info->line,
- JIFFIES_DIFF(info->idle_stats.in_use, cur_jifs) / HZ,
- info->idle_stats.xmit_bytes,
- JIFFIES_DIFF(info->idle_stats.xmit_idle, cur_jifs) / HZ,
- info->idle_stats.recv_bytes,
- JIFFIES_DIFF(info->idle_stats.recv_idle, cur_jifs) / HZ,
- info->idle_stats.overruns,
- (long) info->tty->ldisc.num);
- else
- size = sprintf(buf+len,
- "%3d %8lu %10lu %8lu %10lu %8lu %9lu %6ld\n",
- info->line, 0L, 0L, 0L, 0L, 0L, 0L, 0L);
+ if (capable(CAP_SYS_RAWIO)) {
+ if (info->count)
+ size = sprintf(buf+len,
+ "%3d %8lu %10lu %8lu %10lu %8lu %9lu %6ld\n",
+ info->line,
+ JIFFIES_DIFF(info->idle_stats.in_use, cur_jifs) / HZ,
+ info->idle_stats.xmit_bytes,
+ JIFFIES_DIFF(info->idle_stats.xmit_idle, cur_jifs) / HZ,
+ info->idle_stats.recv_bytes,
+ JIFFIES_DIFF(info->idle_stats.recv_idle, cur_jifs) / HZ,
+ info->idle_stats.overruns,
+ (long) info->tty->ldisc.num);
+ else
+ size = sprintf(buf+len,
+ "%3d %8lu %10lu %8lu %10lu %8lu %9lu %6ld\n",
+ info->line, 0L, 0L, 0L, 0L, 0L, 0L, 0L);
+ } else {
+ if (info->count)
+ size = sprintf(buf+len, "%3d %6ld\n", info->line,
+ (long) info->tty->ldisc.num);
+ else
+ size = sprintf(buf+len, "%3d %6ld\n", info->line, 0L);
+ }
len += size;
pos = begin + len;
diff --git a/drivers/char/ip2main.c b/drivers/char/ip2main.c
diff --git a/drivers/char/istallion.c b/drivers/char/istallion.c
--- a/drivers/char/istallion.c
+++ b/drivers/char/istallion.c
@@ -2511,7 +2511,7 @@ static int stli_portinfo(stlibrd_t *brdp
sp = pos;
sp += sprintf(sp, "%d: uart:%s ", portnr, uart);
- if ((brdp->state & BST_STARTED) && (rc >= 0)) {
+ if (capable(CAP_SYS_RAWIO) && (brdp->state & BST_STARTED) && (rc >= 0)) {
sp += sprintf(sp, "tx:%d rx:%d", (int) stli_comstats.txtotal,
(int) stli_comstats.rxtotal);
diff --git a/drivers/char/pcmcia/synclink_cs.c b/drivers/char/pcmcia/synclink_cs.c
--- a/drivers/char/pcmcia/synclink_cs.c
+++ b/drivers/char/pcmcia/synclink_cs.c
@@ -2879,6 +2879,11 @@ static inline int line_info(char *buf, M
ret = sprintf(buf, "%s:io:%04X irq:%d",
info->device_name, info->io_base, info->irq_level);
+ if (!capable(CAP_SYS_RAWIO)) {
+ strcat(buf, "\n");
+ return ret + 1;
+ }
+
/* output current serial signal states */
spin_lock_irqsave(&info->lock,flags);
get_signals(info);
diff --git a/drivers/char/stallion.c b/drivers/char/stallion.c
--- a/drivers/char/stallion.c
+++ b/drivers/char/stallion.c
@@ -1846,28 +1846,37 @@ static int stl_portinfo(stlport_t *portp
int sigs, cnt;
sp = pos;
- sp += sprintf(sp, "%d: uart:%s tx:%d rx:%d",
- portnr, (portp->hwid == 1) ? "SC26198" : "CD1400",
- (int) portp->stats.txtotal, (int) portp->stats.rxtotal);
-
- if (portp->stats.rxframing)
- sp += sprintf(sp, " fe:%d", (int) portp->stats.rxframing);
- if (portp->stats.rxparity)
- sp += sprintf(sp, " pe:%d", (int) portp->stats.rxparity);
- if (portp->stats.rxbreaks)
- sp += sprintf(sp, " brk:%d", (int) portp->stats.rxbreaks);
- if (portp->stats.rxoverrun)
- sp += sprintf(sp, " oe:%d", (int) portp->stats.rxoverrun);
-
- sigs = stl_getsignals(portp);
- cnt = sprintf(sp, "%s%s%s%s%s ",
- (sigs & TIOCM_RTS) ? "|RTS" : "",
- (sigs & TIOCM_CTS) ? "|CTS" : "",
- (sigs & TIOCM_DTR) ? "|DTR" : "",
- (sigs & TIOCM_CD) ? "|DCD" : "",
- (sigs & TIOCM_DSR) ? "|DSR" : "");
- *sp = ' ';
- sp += cnt;
+ sp += sprintf(sp, "%d: uart:%s",
+ portnr, (portp->hwid == 1) ? "SC26198" : "CD1400");
+
+ if (capable(CAP_SYS_RAWIO)) {
+ sp += sprintf(sp, " tx:%d rx:%d",
+ (int) portp->stats.txtotal,
+ (int) portp->stats.rxtotal);
+
+ if (portp->stats.rxframing)
+ sp += sprintf(sp, " fe:%d",
+ (int) portp->stats.rxframing);
+ if (portp->stats.rxparity)
+ sp += sprintf(sp, " pe:%d",
+ (int) portp->stats.rxparity);
+ if (portp->stats.rxbreaks)
+ sp += sprintf(sp, " brk:%d",
+ (int) portp->stats.rxbreaks);
+ if (portp->stats.rxoverrun)
+ sp += sprintf(sp, " oe:%d",
+ (int) portp->stats.rxoverrun);
+
+ sigs = stl_getsignals(portp);
+ cnt = sprintf(sp, "%s%s%s%s%s ",
+ (sigs & TIOCM_RTS) ? "|RTS" : "",
+ (sigs & TIOCM_CTS) ? "|CTS" : "",
+ (sigs & TIOCM_DTR) ? "|DTR" : "",
+ (sigs & TIOCM_CD) ? "|DCD" : "",
+ (sigs & TIOCM_DSR) ? "|DSR" : "");
+ *sp = ' ';
+ sp += cnt;
+ }
for (cnt = (sp - pos); (cnt < (MAXLINE - 1)); cnt++)
*sp++ = ' ';
diff --git a/drivers/char/synclink.c b/drivers/char/synclink.c
--- a/drivers/char/synclink.c
+++ b/drivers/char/synclink.c
@@ -3554,6 +3554,11 @@ static inline int line_info(char *buf, s
info->irq_level, info->dma_level);
}
+ if (!capable(CAP_SYS_RAWIO)) {
+ strcat(buf, "\n");
+ return ret + 1;
+ }
+
/* output current serial signal states */
spin_lock_irqsave(&info->irq_spinlock,flags);
usc_get_serial_signals(info);
diff --git a/drivers/char/synclinkmp.c b/drivers/char/synclinkmp.c
--- a/drivers/char/synclinkmp.c
+++ b/drivers/char/synclinkmp.c
@@ -1424,6 +1424,10 @@ static inline int line_info(char *buf, S
info->irq_level,
info->max_frame_size );
+ if (!capable(CAP_SYS_RAWIO)) {
+ return ret;
+ }
+
/* output current serial signal states */
spin_lock_irqsave(&info->lock,flags);
get_signals(info);
diff --git a/drivers/isdn/capi/capi.c b/drivers/isdn/capi/capi.c
diff --git a/drivers/macintosh/macserial.c b/drivers/macintosh/macserial.c
diff --git a/drivers/serial/68360serial.c b/drivers/serial/68360serial.c
--- a/drivers/serial/68360serial.c
+++ b/drivers/serial/68360serial.c
@@ -2022,6 +2022,17 @@ static inline int line_info(char *buf, s
info->quot = 0;
info->tty = 0;
}
+
+ if (info->quot) {
+ ret += sprintf(buf+ret, " baud:%d",
+ state->baud_base / info->quot);
+ }
+
+ if (!capable(CAP_SYS_RAWIO)) {
+ strcat(buf, "\n");
+ return ret + 1;
+ }
+
local_irq_disable();
status = serial_in(info, UART_MSR);
control = info ? info->MCR : serial_in(info, UART_MCR);
@@ -2042,11 +2053,6 @@ static inline int line_info(char *buf, s
if (status & UART_MSR_RI)
strcat(stat_buf, "|RI");
- if (info->quot) {
- ret += sprintf(buf+ret, " baud:%d",
- state->baud_base / info->quot);
- }
-
ret += sprintf(buf+ret, " tx:%d rx:%d",
state->icount.tx, state->icount.rx);
diff --git a/drivers/serial/crisv10.c b/drivers/serial/crisv10.c
--- a/drivers/serial/crisv10.c
+++ b/drivers/serial/crisv10.c
@@ -4733,6 +4733,13 @@ extern _INLINE_ int line_info(char *buf,
return ret;
}
+ ret += sprintf(buf+ret, " baud:%d", info->baud);
+
+ if (!capable(CAP_SYS_RAWIO)) {
+ strcat(buf, "\n");
+ return ret + 1;
+ }
+
stat_buf[0] = 0;
stat_buf[1] = 0;
if (!E100_RTS_GET(info))
diff --git a/drivers/serial/mcfserial.c b/drivers/serial/mcfserial.c
--- a/drivers/serial/mcfserial.c
+++ b/drivers/serial/mcfserial.c
@@ -1581,6 +1581,13 @@ int mcfrs_readproc(char *page, char **st
info = &mcfrs_table[i];
len += sprintf((page + len), "%d: port:%x irq=%d baud:%d ",
i, (unsigned int) info->addr, info->irq, info->baud);
+
+ if (!capable(CAP_SYS_RAWIO)) {
+ strcat(page, "\n");
+ len++;
+ continue;
+ }
+
if (info->stats.rx || info->stats.tx)
len += sprintf((page + len), "tx:%d rx:%d ",
info->stats.tx, info->stats.rx);
diff --git a/drivers/serial/serial_core.c b/drivers/serial/serial_core.c
--- a/drivers/serial/serial_core.c
+++ b/drivers/serial/serial_core.c
@@ -1616,7 +1616,7 @@ static int uart_line_info(char *buf, str
return ret + 1;
}
- if(capable(CAP_SYS_ADMIN))
+ if (capable(CAP_SYS_RAWIO))
{
status = port->ops->get_mctrl(port);
diff --git a/fs/proc/proc_tty.c b/fs/proc/proc_tty.c
--- a/fs/proc/proc_tty.c
+++ b/fs/proc/proc_tty.c
@@ -227,13 +227,8 @@ void __init proc_tty_init(void)
if (!proc_mkdir("tty", NULL))
return;
proc_tty_ldisc = proc_mkdir("tty/ldisc", NULL);
- /*
- * /proc/tty/driver/serial reveals the exact character counts for
- * serial links which is just too easy to abuse for inferring
- * password lengths and inter-keystroke timings during password
- * entry.
- */
- proc_tty_driver = proc_mkdir_mode("tty/driver", S_IRUSR | S_IXUSR, NULL);
+
+ proc_tty_driver = proc_mkdir("tty/driver", NULL);
create_proc_read_entry("tty/ldiscs", 0, NULL, tty_ldiscs_read_proc, NULL);
entry = create_proc_entry("tty/drivers", 0, NULL);
diff --git a/net/bluetooth/rfcomm/tty.c b/net/bluetooth/rfcomm/tty.c
diff --git a/net/irda/ircomm/ircomm_tty.c b/net/irda/ircomm/ircomm_tty.c
--- a/net/irda/ircomm/ircomm_tty.c
+++ b/net/irda/ircomm/ircomm_tty.c
@@ -1268,27 +1268,29 @@ static int ircomm_tty_line_info(struct i
ret += sprintf(buf+ret, "Port name: %s\n", self->settings.port_name);
- ret += sprintf(buf+ret, "DTE status: ");
- if (self->settings.dte & IRCOMM_RTS)
- ret += sprintf(buf+ret, "RTS|");
- if (self->settings.dte & IRCOMM_DTR)
- ret += sprintf(buf+ret, "DTR|");
- if (self->settings.dte)
- ret--; /* remove the last | */
- ret += sprintf(buf+ret, "\n");
-
- ret += sprintf(buf+ret, "DCE status: ");
- if (self->settings.dce & IRCOMM_CTS)
- ret += sprintf(buf+ret, "CTS|");
- if (self->settings.dce & IRCOMM_DSR)
- ret += sprintf(buf+ret, "DSR|");
- if (self->settings.dce & IRCOMM_CD)
- ret += sprintf(buf+ret, "CD|");
- if (self->settings.dce & IRCOMM_RI)
- ret += sprintf(buf+ret, "RI|");
- if (self->settings.dce)
- ret--; /* remove the last | */
- ret += sprintf(buf+ret, "\n");
+ if (capable(CAP_SYS_RAWIO)) {
+ ret += sprintf(buf+ret, "DTE status: ");
+ if (self->settings.dte & IRCOMM_RTS)
+ ret += sprintf(buf+ret, "RTS|");
+ if (self->settings.dte & IRCOMM_DTR)
+ ret += sprintf(buf+ret, "DTR|");
+ if (self->settings.dte)
+ ret--; /* remove the last | */
+ ret += sprintf(buf+ret, "\n");
+
+ ret += sprintf(buf+ret, "DCE status: ");
+ if (self->settings.dce & IRCOMM_CTS)
+ ret += sprintf(buf+ret, "CTS|");
+ if (self->settings.dce & IRCOMM_DSR)
+ ret += sprintf(buf+ret, "DSR|");
+ if (self->settings.dce & IRCOMM_CD)
+ ret += sprintf(buf+ret, "CD|");
+ if (self->settings.dce & IRCOMM_RI)
+ ret += sprintf(buf+ret, "RI|");
+ if (self->settings.dce)
+ ret--; /* remove the last | */
+ ret += sprintf(buf+ret, "\n");
+ }
ret += sprintf(buf+ret, "Configuration: ");
if (!self->settings.null_modem)
@@ -1339,11 +1341,13 @@ static int ircomm_tty_line_info(struct i
ret += sprintf(buf+ret, "Role: %s\n", self->client ?
"client" : "server");
- ret += sprintf(buf+ret, "Open count: %d\n", self->open_count);
+ if (capable(CAP_SYS_RAWIO)) {
+ ret += sprintf(buf+ret, "Open count: %d\n", self->open_count);
+ }
ret += sprintf(buf+ret, "Max data size: %d\n", self->max_data_size);
ret += sprintf(buf+ret, "Max header size: %d\n", self->max_header_size);
- if (self->tty)
+ if (self->tty && capable(CAP_SYS_RAWIO))
ret += sprintf(buf+ret, "Hardware: %s\n",
self->tty->hw_stopped ? "Stopped" : "Running");
[-- Attachment #2: Type: text/plain, Size: 167 bytes --]
_______________________________________________
Kernel-janitors mailing list
Kernel-janitors@lists.osdl.org
http://lists.osdl.org/mailman/listinfo/kernel-janitors
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [KJ] [PATCH 2.6.12] [RESEND] /proc/tty/driver/* filtering for non
2005-06-22 19:47 [KJ] [PATCH 2.6.12] [RESEND] /proc/tty/driver/* filtering for non Daniel Smertnig
@ 2005-06-29 10:42 ` Domen Puncer
2005-06-29 11:01 ` [KJ] [PATCH 2.6.12] [RESEND] /proc/tty/driver/* filtering for walter harms
` (6 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: Domen Puncer @ 2005-06-29 10:42 UTC (permalink / raw)
To: kernel-janitors
[-- Attachment #1: Type: text/plain, Size: 870 bytes --]
On 22/06/05 21:47 +0200, Daniel Smertnig wrote:
> Only give out non-sensitive information to CAP_SYS_RAWIO users in
> /proc/tty/driver/* and make it world-readable, as described in the
> kernel janitors TODO:
>
> Signed-off-by: Daniel Smertnig <daniel.smertnig@gmail.com>
>
> diff --git a/drivers/char/amiserial.c b/drivers/char/amiserial.c
> --- a/drivers/char/amiserial.c
> +++ b/drivers/char/amiserial.c
> @@ -1876,6 +1876,17 @@ static inline int line_info(char *buf, s
> info->quot = 0;
> info->tty = NULL;
> }
> +
> + if (info->quot) {
> + ret += sprintf(buf+ret, " baud:%d",
> + state->baud_base / info->quot);
> + }
> +
> + if (!capable(CAP_SYS_RAWIO)) {
> + strcat(buf, "\n");
> + return ret + 1;
So... we overwrite first two bytes, and then return the whole string?
Or am I missing something?
> + }
> +
^^ you introduce whitespace.
[-- Attachment #2: Type: text/plain, Size: 167 bytes --]
_______________________________________________
Kernel-janitors mailing list
Kernel-janitors@lists.osdl.org
http://lists.osdl.org/mailman/listinfo/kernel-janitors
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [KJ] [PATCH 2.6.12] [RESEND] /proc/tty/driver/* filtering for
2005-06-22 19:47 [KJ] [PATCH 2.6.12] [RESEND] /proc/tty/driver/* filtering for non Daniel Smertnig
2005-06-29 10:42 ` Domen Puncer
@ 2005-06-29 11:01 ` walter harms
2005-06-30 13:01 ` [KJ] [PATCH 2.6.12] [RESEND] /proc/tty/driver/* filtering for non Daniel Smertnig
` (5 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: walter harms @ 2005-06-29 11:01 UTC (permalink / raw)
To: kernel-janitors
[-- Attachment #1: Type: text/plain, Size: 1411 bytes --]
i am not an expert in using /proc but why should '\n' so important that
only CAP_SYS_RAWIO may use it ?
buf will already have the baud information in the string.
perhaps checking first for CAP_SYS_RAWIO would make sense ?
re,
walter
Domen Puncer wrote:
> On 22/06/05 21:47 +0200, Daniel Smertnig wrote:
>
>>Only give out non-sensitive information to CAP_SYS_RAWIO users in
>>/proc/tty/driver/* and make it world-readable, as described in the
>>kernel janitors TODO:
>>
>>Signed-off-by: Daniel Smertnig <daniel.smertnig@gmail.com>
>>
>>diff --git a/drivers/char/amiserial.c b/drivers/char/amiserial.c
>>--- a/drivers/char/amiserial.c
>>+++ b/drivers/char/amiserial.c
>>@@ -1876,6 +1876,17 @@ static inline int line_info(char *buf, s
>> info->quot = 0;
>> info->tty = NULL;
>> }
>>+
>>+ if (info->quot) {
>>+ ret += sprintf(buf+ret, " baud:%d",
>>+ state->baud_base / info->quot);
>>+ }
>>+
>>+ if (!capable(CAP_SYS_RAWIO)) {
>>+ strcat(buf, "\n");
>>+ return ret + 1;
>
>
> So... we overwrite first two bytes, and then return the whole string?
> Or am I missing something?
>
>
>>+ }
>>+
>
>
> ^^ you introduce whitespace.
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Kernel-janitors mailing list
> Kernel-janitors@lists.osdl.org
> http://lists.osdl.org/mailman/listinfo/kernel-janitors
[-- Attachment #2: Type: text/plain, Size: 167 bytes --]
_______________________________________________
Kernel-janitors mailing list
Kernel-janitors@lists.osdl.org
http://lists.osdl.org/mailman/listinfo/kernel-janitors
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [KJ] [PATCH 2.6.12] [RESEND] /proc/tty/driver/* filtering for non
2005-06-22 19:47 [KJ] [PATCH 2.6.12] [RESEND] /proc/tty/driver/* filtering for non Daniel Smertnig
2005-06-29 10:42 ` Domen Puncer
2005-06-29 11:01 ` [KJ] [PATCH 2.6.12] [RESEND] /proc/tty/driver/* filtering for walter harms
@ 2005-06-30 13:01 ` Daniel Smertnig
2005-06-30 13:05 ` Daniel Smertnig
` (4 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: Daniel Smertnig @ 2005-06-30 13:01 UTC (permalink / raw)
To: kernel-janitors
On 6/29/05, Domen Puncer <domen@coderock.org> wrote:
> On 22/06/05 21:47 +0200, Daniel Smertnig wrote:
> > diff --git a/drivers/char/amiserial.c b/drivers/char/amiserial.c
> > --- a/drivers/char/amiserial.c
> > +++ b/drivers/char/amiserial.c
> > @@ -1876,6 +1876,17 @@ static inline int line_info(char *buf, s
> > info->quot = 0;
> > info->tty = NULL;
> > }
> > +
> > + if (info->quot) {
> > + ret += sprintf(buf+ret, " baud:%d",
> > + state->baud_base / info->quot);
> > + }
> > +
> > + if (!capable(CAP_SYS_RAWIO)) {
> > + strcat(buf, "\n");
> > + return ret + 1;
>
> So... we overwrite first two bytes, and then return the whole string?
> Or am I missing something?
I don't see any problem here? A newline is appended to the string and
the total length of the string (previous length "ret" + 1 for the
newline) is returned.
> > + }
> > +
>
> ^^ you introduce whitespace.
Sorry, i will resend with that fixed
_______________________________________________
Kernel-janitors mailing list
Kernel-janitors@lists.osdl.org
http://lists.osdl.org/mailman/listinfo/kernel-janitors
^ permalink raw reply [flat|nested] 9+ messages in thread
* [KJ] [PATCH 2.6.12] [RESEND] /proc/tty/driver/* filtering for non
2005-06-22 19:47 [KJ] [PATCH 2.6.12] [RESEND] /proc/tty/driver/* filtering for non Daniel Smertnig
` (2 preceding siblings ...)
2005-06-30 13:01 ` [KJ] [PATCH 2.6.12] [RESEND] /proc/tty/driver/* filtering for non Daniel Smertnig
@ 2005-06-30 13:05 ` Daniel Smertnig
2005-06-30 13:48 ` Domen Puncer
` (3 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: Daniel Smertnig @ 2005-06-30 13:05 UTC (permalink / raw)
To: kernel-janitors
[-- Attachment #1: Type: text/plain, Size: 14062 bytes --]
Only give out non-sensitive information to CAP_SYS_RAWIO users in
/proc/tty/driver/* and make it world-readable, as described in the
kernel janitors TODO:
"go through all the tty/serial drivers and make sure they don't give out
excessively useful information to non CAP_SYS_RAWIO users, then loosen
permissions. [D: http://lkml.org/lkml/2005/1/17/94]"
Only port settings (irqs, baud rate, flow control configuration, ...)
are given to ordinary users. Current port status (tx, rx, error
counters, status flags, ...) is limited to CAP_SYS_RAWIO users.
The following files where checked (should be all serial drivers which
implement the tty read_proc function):
arch/ia64/hp/sim/simserial.c
drivers/usb/serial/usb-serial.c
drivers/char/synclinkmp.c
drivers/char/istallion.c
drivers/char/amiserial.c
drivers/char/cyclades.c
drivers/char/stallion.c
drivers/char/pcmcia/synclink_cs.c
drivers/char/ip2main.c
drivers/char/synclink.c
drivers/isdn/capi/capi.c
drivers/serial/crisv10.c
drivers/serial/serial_core.c
drivers/serial/mcfserial.c
drivers/serial/68360serial.c
drivers/macintosh/macserial.c
net/irda/ircomm/ircomm_tty.c
net/bluetooth/rfcomm/tty.c
Signed-off-by: Daniel Smertnig <daniel.smertnig@gmail.com>
diff --git a/drivers/char/amiserial.c b/drivers/char/amiserial.c
--- a/drivers/char/amiserial.c
+++ b/drivers/char/amiserial.c
@@ -1876,6 +1876,17 @@ static inline int line_info(char *buf, s
info->quot = 0;
info->tty = NULL;
}
+
+ if (info->quot) {
+ ret += sprintf(buf+ret, " baud:%d",
+ state->baud_base / info->quot);
+ }
+
+ if (!capable(CAP_SYS_RAWIO)) {
+ strcat(buf, "\n");
+ return ret + 1;
+ }
+
local_irq_save(flags);
status = ciab.pra;
control = info ? info->MCR : status;
@@ -1894,11 +1905,6 @@ static inline int line_info(char *buf, s
if(!(status & SER_DCD))
strcat(stat_buf, "|CD");
- if (info->quot) {
- ret += sprintf(buf+ret, " baud:%d",
- state->baud_base / info->quot);
- }
-
ret += sprintf(buf+ret, " tx:%d rx:%d",
state->icount.tx, state->icount.rx);
diff --git a/drivers/char/cyclades.c b/drivers/char/cyclades.c
--- a/drivers/char/cyclades.c
+++ b/drivers/char/cyclades.c
@@ -5179,7 +5179,11 @@ cyclades_get_proc_info(char *buf, char *
int size;
__u32 cur_jifs = jiffies;
- size = sprintf(buf, "Dev TimeOpen BytesOut IdleOut BytesIn IdleIn Overruns Ldisc\n");
+ if (capable(CAP_SYS_RAWIO)) {
+ size = sprintf(buf, "Dev TimeOpen BytesOut IdleOut BytesIn IdleIn Overruns Ldisc\n");
+ } else {
+ size = sprintf(buf, "Dev Ldisc\n");
+ }
pos += size;
len += size;
@@ -5188,21 +5192,29 @@ cyclades_get_proc_info(char *buf, char *
for (i = 0; i < NR_PORTS && cy_port[i].line >= 0; i++) {
info = &cy_port[i];
- if (info->count)
- size = sprintf(buf+len,
- "%3d %8lu %10lu %8lu %10lu %8lu %9lu %6ld\n",
- info->line,
- JIFFIES_DIFF(info->idle_stats.in_use, cur_jifs) / HZ,
- info->idle_stats.xmit_bytes,
- JIFFIES_DIFF(info->idle_stats.xmit_idle, cur_jifs) / HZ,
- info->idle_stats.recv_bytes,
- JIFFIES_DIFF(info->idle_stats.recv_idle, cur_jifs) / HZ,
- info->idle_stats.overruns,
- (long) info->tty->ldisc.num);
- else
- size = sprintf(buf+len,
- "%3d %8lu %10lu %8lu %10lu %8lu %9lu %6ld\n",
- info->line, 0L, 0L, 0L, 0L, 0L, 0L, 0L);
+ if (capable(CAP_SYS_RAWIO)) {
+ if (info->count)
+ size = sprintf(buf+len,
+ "%3d %8lu %10lu %8lu %10lu %8lu %9lu %6ld\n",
+ info->line,
+ JIFFIES_DIFF(info->idle_stats.in_use, cur_jifs) / HZ,
+ info->idle_stats.xmit_bytes,
+ JIFFIES_DIFF(info->idle_stats.xmit_idle, cur_jifs) / HZ,
+ info->idle_stats.recv_bytes,
+ JIFFIES_DIFF(info->idle_stats.recv_idle, cur_jifs) / HZ,
+ info->idle_stats.overruns,
+ (long) info->tty->ldisc.num);
+ else
+ size = sprintf(buf+len,
+ "%3d %8lu %10lu %8lu %10lu %8lu %9lu %6ld\n",
+ info->line, 0L, 0L, 0L, 0L, 0L, 0L, 0L);
+ } else {
+ if (info->count)
+ size = sprintf(buf+len, "%3d %6ld\n", info->line,
+ (long) info->tty->ldisc.num);
+ else
+ size = sprintf(buf+len, "%3d %6ld\n", info->line, 0L);
+ }
len += size;
pos = begin + len;
diff --git a/drivers/char/ip2main.c b/drivers/char/ip2main.c
diff --git a/drivers/char/istallion.c b/drivers/char/istallion.c
--- a/drivers/char/istallion.c
+++ b/drivers/char/istallion.c
@@ -2511,7 +2511,7 @@ static int stli_portinfo(stlibrd_t *brdp
sp = pos;
sp += sprintf(sp, "%d: uart:%s ", portnr, uart);
- if ((brdp->state & BST_STARTED) && (rc >= 0)) {
+ if (capable(CAP_SYS_RAWIO) && (brdp->state & BST_STARTED) && (rc >= 0)) {
sp += sprintf(sp, "tx:%d rx:%d", (int) stli_comstats.txtotal,
(int) stli_comstats.rxtotal);
diff --git a/drivers/char/pcmcia/synclink_cs.c b/drivers/char/pcmcia/synclink_cs.c
--- a/drivers/char/pcmcia/synclink_cs.c
+++ b/drivers/char/pcmcia/synclink_cs.c
@@ -2879,6 +2879,11 @@ static inline int line_info(char *buf, M
ret = sprintf(buf, "%s:io:%04X irq:%d",
info->device_name, info->io_base, info->irq_level);
+ if (!capable(CAP_SYS_RAWIO)) {
+ strcat(buf, "\n");
+ return ret + 1;
+ }
+
/* output current serial signal states */
spin_lock_irqsave(&info->lock,flags);
get_signals(info);
diff --git a/drivers/char/stallion.c b/drivers/char/stallion.c
--- a/drivers/char/stallion.c
+++ b/drivers/char/stallion.c
@@ -1846,28 +1846,37 @@ static int stl_portinfo(stlport_t *portp
int sigs, cnt;
sp = pos;
- sp += sprintf(sp, "%d: uart:%s tx:%d rx:%d",
- portnr, (portp->hwid == 1) ? "SC26198" : "CD1400",
- (int) portp->stats.txtotal, (int) portp->stats.rxtotal);
-
- if (portp->stats.rxframing)
- sp += sprintf(sp, " fe:%d", (int) portp->stats.rxframing);
- if (portp->stats.rxparity)
- sp += sprintf(sp, " pe:%d", (int) portp->stats.rxparity);
- if (portp->stats.rxbreaks)
- sp += sprintf(sp, " brk:%d", (int) portp->stats.rxbreaks);
- if (portp->stats.rxoverrun)
- sp += sprintf(sp, " oe:%d", (int) portp->stats.rxoverrun);
-
- sigs = stl_getsignals(portp);
- cnt = sprintf(sp, "%s%s%s%s%s ",
- (sigs & TIOCM_RTS) ? "|RTS" : "",
- (sigs & TIOCM_CTS) ? "|CTS" : "",
- (sigs & TIOCM_DTR) ? "|DTR" : "",
- (sigs & TIOCM_CD) ? "|DCD" : "",
- (sigs & TIOCM_DSR) ? "|DSR" : "");
- *sp = ' ';
- sp += cnt;
+ sp += sprintf(sp, "%d: uart:%s",
+ portnr, (portp->hwid == 1) ? "SC26198" : "CD1400");
+
+ if (capable(CAP_SYS_RAWIO)) {
+ sp += sprintf(sp, " tx:%d rx:%d",
+ (int) portp->stats.txtotal,
+ (int) portp->stats.rxtotal);
+
+ if (portp->stats.rxframing)
+ sp += sprintf(sp, " fe:%d",
+ (int) portp->stats.rxframing);
+ if (portp->stats.rxparity)
+ sp += sprintf(sp, " pe:%d",
+ (int) portp->stats.rxparity);
+ if (portp->stats.rxbreaks)
+ sp += sprintf(sp, " brk:%d",
+ (int) portp->stats.rxbreaks);
+ if (portp->stats.rxoverrun)
+ sp += sprintf(sp, " oe:%d",
+ (int) portp->stats.rxoverrun);
+
+ sigs = stl_getsignals(portp);
+ cnt = sprintf(sp, "%s%s%s%s%s ",
+ (sigs & TIOCM_RTS) ? "|RTS" : "",
+ (sigs & TIOCM_CTS) ? "|CTS" : "",
+ (sigs & TIOCM_DTR) ? "|DTR" : "",
+ (sigs & TIOCM_CD) ? "|DCD" : "",
+ (sigs & TIOCM_DSR) ? "|DSR" : "");
+ *sp = ' ';
+ sp += cnt;
+ }
for (cnt = (sp - pos); (cnt < (MAXLINE - 1)); cnt++)
*sp++ = ' ';
diff --git a/drivers/char/synclink.c b/drivers/char/synclink.c
--- a/drivers/char/synclink.c
+++ b/drivers/char/synclink.c
@@ -3554,6 +3554,11 @@ static inline int line_info(char *buf, s
info->irq_level, info->dma_level);
}
+ if (!capable(CAP_SYS_RAWIO)) {
+ strcat(buf, "\n");
+ return ret + 1;
+ }
+
/* output current serial signal states */
spin_lock_irqsave(&info->irq_spinlock,flags);
usc_get_serial_signals(info);
diff --git a/drivers/char/synclinkmp.c b/drivers/char/synclinkmp.c
--- a/drivers/char/synclinkmp.c
+++ b/drivers/char/synclinkmp.c
@@ -1424,6 +1424,10 @@ static inline int line_info(char *buf, S
info->irq_level,
info->max_frame_size );
+ if (!capable(CAP_SYS_RAWIO)) {
+ return ret;
+ }
+
/* output current serial signal states */
spin_lock_irqsave(&info->lock,flags);
get_signals(info);
diff --git a/drivers/isdn/capi/capi.c b/drivers/isdn/capi/capi.c
diff --git a/drivers/macintosh/macserial.c b/drivers/macintosh/macserial.c
diff --git a/drivers/serial/68360serial.c b/drivers/serial/68360serial.c
--- a/drivers/serial/68360serial.c
+++ b/drivers/serial/68360serial.c
@@ -2022,6 +2022,17 @@ static inline int line_info(char *buf, s
info->quot = 0;
info->tty = 0;
}
+
+ if (info->quot) {
+ ret += sprintf(buf+ret, " baud:%d",
+ state->baud_base / info->quot);
+ }
+
+ if (!capable(CAP_SYS_RAWIO)) {
+ strcat(buf, "\n");
+ return ret + 1;
+ }
+
local_irq_disable();
status = serial_in(info, UART_MSR);
control = info ? info->MCR : serial_in(info, UART_MCR);
@@ -2042,11 +2053,6 @@ static inline int line_info(char *buf, s
if (status & UART_MSR_RI)
strcat(stat_buf, "|RI");
- if (info->quot) {
- ret += sprintf(buf+ret, " baud:%d",
- state->baud_base / info->quot);
- }
-
ret += sprintf(buf+ret, " tx:%d rx:%d",
state->icount.tx, state->icount.rx);
diff --git a/drivers/serial/crisv10.c b/drivers/serial/crisv10.c
--- a/drivers/serial/crisv10.c
+++ b/drivers/serial/crisv10.c
@@ -4733,6 +4733,13 @@ extern _INLINE_ int line_info(char *buf,
return ret;
}
+ ret += sprintf(buf+ret, " baud:%d", info->baud);
+
+ if (!capable(CAP_SYS_RAWIO)) {
+ strcat(buf, "\n");
+ return ret + 1;
+ }
+
stat_buf[0] = 0;
stat_buf[1] = 0;
if (!E100_RTS_GET(info))
diff --git a/drivers/serial/mcfserial.c b/drivers/serial/mcfserial.c
--- a/drivers/serial/mcfserial.c
+++ b/drivers/serial/mcfserial.c
@@ -1581,6 +1581,13 @@ int mcfrs_readproc(char *page, char **st
info = &mcfrs_table[i];
len += sprintf((page + len), "%d: port:%x irq=%d baud:%d ",
i, (unsigned int) info->addr, info->irq, info->baud);
+
+ if (!capable(CAP_SYS_RAWIO)) {
+ strcat(page, "\n");
+ len++;
+ continue;
+ }
+
if (info->stats.rx || info->stats.tx)
len += sprintf((page + len), "tx:%d rx:%d ",
info->stats.tx, info->stats.rx);
diff --git a/drivers/serial/serial_core.c b/drivers/serial/serial_core.c
--- a/drivers/serial/serial_core.c
+++ b/drivers/serial/serial_core.c
@@ -1616,7 +1616,7 @@ static int uart_line_info(char *buf, str
return ret + 1;
}
- if(capable(CAP_SYS_ADMIN))
+ if (capable(CAP_SYS_RAWIO))
{
status = port->ops->get_mctrl(port);
diff --git a/fs/proc/proc_tty.c b/fs/proc/proc_tty.c
--- a/fs/proc/proc_tty.c
+++ b/fs/proc/proc_tty.c
@@ -227,13 +227,8 @@ void __init proc_tty_init(void)
if (!proc_mkdir("tty", NULL))
return;
proc_tty_ldisc = proc_mkdir("tty/ldisc", NULL);
- /*
- * /proc/tty/driver/serial reveals the exact character counts for
- * serial links which is just too easy to abuse for inferring
- * password lengths and inter-keystroke timings during password
- * entry.
- */
- proc_tty_driver = proc_mkdir_mode("tty/driver", S_IRUSR | S_IXUSR, NULL);
+
+ proc_tty_driver = proc_mkdir("tty/driver", NULL);
create_proc_read_entry("tty/ldiscs", 0, NULL, tty_ldiscs_read_proc, NULL);
entry = create_proc_entry("tty/drivers", 0, NULL);
diff --git a/net/bluetooth/rfcomm/tty.c b/net/bluetooth/rfcomm/tty.c
diff --git a/net/irda/ircomm/ircomm_tty.c b/net/irda/ircomm/ircomm_tty.c
--- a/net/irda/ircomm/ircomm_tty.c
+++ b/net/irda/ircomm/ircomm_tty.c
@@ -1268,27 +1268,29 @@ static int ircomm_tty_line_info(struct i
ret += sprintf(buf+ret, "Port name: %s\n", self->settings.port_name);
- ret += sprintf(buf+ret, "DTE status: ");
- if (self->settings.dte & IRCOMM_RTS)
- ret += sprintf(buf+ret, "RTS|");
- if (self->settings.dte & IRCOMM_DTR)
- ret += sprintf(buf+ret, "DTR|");
- if (self->settings.dte)
- ret--; /* remove the last | */
- ret += sprintf(buf+ret, "\n");
-
- ret += sprintf(buf+ret, "DCE status: ");
- if (self->settings.dce & IRCOMM_CTS)
- ret += sprintf(buf+ret, "CTS|");
- if (self->settings.dce & IRCOMM_DSR)
- ret += sprintf(buf+ret, "DSR|");
- if (self->settings.dce & IRCOMM_CD)
- ret += sprintf(buf+ret, "CD|");
- if (self->settings.dce & IRCOMM_RI)
- ret += sprintf(buf+ret, "RI|");
- if (self->settings.dce)
- ret--; /* remove the last | */
- ret += sprintf(buf+ret, "\n");
+ if (capable(CAP_SYS_RAWIO)) {
+ ret += sprintf(buf+ret, "DTE status: ");
+ if (self->settings.dte & IRCOMM_RTS)
+ ret += sprintf(buf+ret, "RTS|");
+ if (self->settings.dte & IRCOMM_DTR)
+ ret += sprintf(buf+ret, "DTR|");
+ if (self->settings.dte)
+ ret--; /* remove the last | */
+ ret += sprintf(buf+ret, "\n");
+
+ ret += sprintf(buf+ret, "DCE status: ");
+ if (self->settings.dce & IRCOMM_CTS)
+ ret += sprintf(buf+ret, "CTS|");
+ if (self->settings.dce & IRCOMM_DSR)
+ ret += sprintf(buf+ret, "DSR|");
+ if (self->settings.dce & IRCOMM_CD)
+ ret += sprintf(buf+ret, "CD|");
+ if (self->settings.dce & IRCOMM_RI)
+ ret += sprintf(buf+ret, "RI|");
+ if (self->settings.dce)
+ ret--; /* remove the last | */
+ ret += sprintf(buf+ret, "\n");
+ }
ret += sprintf(buf+ret, "Configuration: ");
if (!self->settings.null_modem)
@@ -1339,11 +1341,13 @@ static int ircomm_tty_line_info(struct i
ret += sprintf(buf+ret, "Role: %s\n", self->client ?
"client" : "server");
- ret += sprintf(buf+ret, "Open count: %d\n", self->open_count);
+ if (capable(CAP_SYS_RAWIO)) {
+ ret += sprintf(buf+ret, "Open count: %d\n", self->open_count);
+ }
ret += sprintf(buf+ret, "Max data size: %d\n", self->max_data_size);
ret += sprintf(buf+ret, "Max header size: %d\n", self->max_header_size);
- if (self->tty)
+ if (self->tty && capable(CAP_SYS_RAWIO))
ret += sprintf(buf+ret, "Hardware: %s\n",
self->tty->hw_stopped ? "Stopped" : "Running");
[-- Attachment #2: Type: text/plain, Size: 167 bytes --]
_______________________________________________
Kernel-janitors mailing list
Kernel-janitors@lists.osdl.org
http://lists.osdl.org/mailman/listinfo/kernel-janitors
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [KJ] [PATCH 2.6.12] [RESEND] /proc/tty/driver/* filtering for non
2005-06-22 19:47 [KJ] [PATCH 2.6.12] [RESEND] /proc/tty/driver/* filtering for non Daniel Smertnig
` (3 preceding siblings ...)
2005-06-30 13:05 ` Daniel Smertnig
@ 2005-06-30 13:48 ` Domen Puncer
2005-06-30 13:56 ` Daniel Smertnig
` (2 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: Domen Puncer @ 2005-06-30 13:48 UTC (permalink / raw)
To: kernel-janitors
[-- Attachment #1: Type: text/plain, Size: 1402 bytes --]
On 30/06/05 15:01 +0200, Daniel Smertnig wrote:
> On 6/29/05, Domen Puncer <domen@coderock.org> wrote:
> > On 22/06/05 21:47 +0200, Daniel Smertnig wrote:
> > > diff --git a/drivers/char/amiserial.c b/drivers/char/amiserial.c
> > > --- a/drivers/char/amiserial.c
> > > +++ b/drivers/char/amiserial.c
> > > @@ -1876,6 +1876,17 @@ static inline int line_info(char *buf, s
> > > info->quot = 0;
> > > info->tty = NULL;
> > > }
> > > +
> > > + if (info->quot) {
> > > + ret += sprintf(buf+ret, " baud:%d",
> > > + state->baud_base / info->quot);
> > > + }
> > > +
> > > + if (!capable(CAP_SYS_RAWIO)) {
> > > + strcat(buf, "\n");
> > > + return ret + 1;
> >
> > So... we overwrite first two bytes, and then return the whole string?
> > Or am I missing something?
>
> I don't see any problem here? A newline is appended to the string and
> the total length of the string (previous length "ret" + 1 for the
> newline) is returned.
Ahh... I think I get your intent.
That should be strcat(buf+ret, "\n"); , right?
>
> > > + }
> > > +
> >
> > ^^ you introduce whitespace.
>
> Sorry, i will resend with that fixed
>
> _______________________________________________
> Kernel-janitors mailing list
> Kernel-janitors@lists.osdl.org
> http://lists.osdl.org/mailman/listinfo/kernel-janitors
[-- Attachment #2: Type: text/plain, Size: 167 bytes --]
_______________________________________________
Kernel-janitors mailing list
Kernel-janitors@lists.osdl.org
http://lists.osdl.org/mailman/listinfo/kernel-janitors
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [KJ] [PATCH 2.6.12] [RESEND] /proc/tty/driver/* filtering for non
2005-06-22 19:47 [KJ] [PATCH 2.6.12] [RESEND] /proc/tty/driver/* filtering for non Daniel Smertnig
` (4 preceding siblings ...)
2005-06-30 13:48 ` Domen Puncer
@ 2005-06-30 13:56 ` Daniel Smertnig
2005-06-30 15:50 ` Domen Puncer
2005-06-30 17:23 ` Daniel Smertnig
7 siblings, 0 replies; 9+ messages in thread
From: Daniel Smertnig @ 2005-06-30 13:56 UTC (permalink / raw)
To: kernel-janitors
[-- Attachment #1: Type: text/plain, Size: 310 bytes --]
On Thu, Jun 30, 2005 at 03:48:45PM +0200, Domen Puncer wrote:
> Ahh... I think I get your intent.
> That should be strcat(buf+ret, "\n"); , right?
Hmm, that would work to, but strcat() always appends to the end of the
string anyway. But if buf+ret is clearer to you I can change it. Shall
I?
thanks,
daniel
[-- Attachment #2: Type: text/plain, Size: 167 bytes --]
_______________________________________________
Kernel-janitors mailing list
Kernel-janitors@lists.osdl.org
http://lists.osdl.org/mailman/listinfo/kernel-janitors
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [KJ] [PATCH 2.6.12] [RESEND] /proc/tty/driver/* filtering for non
2005-06-22 19:47 [KJ] [PATCH 2.6.12] [RESEND] /proc/tty/driver/* filtering for non Daniel Smertnig
` (5 preceding siblings ...)
2005-06-30 13:56 ` Daniel Smertnig
@ 2005-06-30 15:50 ` Domen Puncer
2005-06-30 17:23 ` Daniel Smertnig
7 siblings, 0 replies; 9+ messages in thread
From: Domen Puncer @ 2005-06-30 15:50 UTC (permalink / raw)
To: kernel-janitors
[-- Attachment #1: Type: text/plain, Size: 671 bytes --]
On 30/06/05 15:56 +0200, Daniel Smertnig wrote:
> On Thu, Jun 30, 2005 at 03:48:45PM +0200, Domen Puncer wrote:
> > Ahh... I think I get your intent.
> > That should be strcat(buf+ret, "\n"); , right?
>
> Hmm, that would work to, but strcat() always appends to the end of the
> string anyway. But if buf+ret is clearer to you I can change it. Shall
> I?
Ah, dammit, that's what I was missing. Somehow I was reading "strcpy".
It's fine the way it is; sorry for the noise.
>
> thanks,
> daniel
> _______________________________________________
> Kernel-janitors mailing list
> Kernel-janitors@lists.osdl.org
> http://lists.osdl.org/mailman/listinfo/kernel-janitors
[-- Attachment #2: Type: text/plain, Size: 167 bytes --]
_______________________________________________
Kernel-janitors mailing list
Kernel-janitors@lists.osdl.org
http://lists.osdl.org/mailman/listinfo/kernel-janitors
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [KJ] [PATCH 2.6.12] [RESEND] /proc/tty/driver/* filtering for non
2005-06-22 19:47 [KJ] [PATCH 2.6.12] [RESEND] /proc/tty/driver/* filtering for non Daniel Smertnig
` (6 preceding siblings ...)
2005-06-30 15:50 ` Domen Puncer
@ 2005-06-30 17:23 ` Daniel Smertnig
7 siblings, 0 replies; 9+ messages in thread
From: Daniel Smertnig @ 2005-06-30 17:23 UTC (permalink / raw)
To: kernel-janitors
On 6/30/05, Domen Puncer <domen@coderock.org> wrote:
> On 30/06/05 15:56 +0200, Daniel Smertnig wrote:
> > Hmm, that would work to, but strcat() always appends to the end of the
> > string anyway. But if buf+ret is clearer to you I can change it. Shall
> > I?
>
> Ah, dammit, that's what I was missing. Somehow I was reading "strcpy".
>
> It's fine the way it is; sorry for the noise.
oh, sorry for the confusion :-)
thanks,
daniel
_______________________________________________
Kernel-janitors mailing list
Kernel-janitors@lists.osdl.org
http://lists.osdl.org/mailman/listinfo/kernel-janitors
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2005-06-30 17:23 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-06-22 19:47 [KJ] [PATCH 2.6.12] [RESEND] /proc/tty/driver/* filtering for non Daniel Smertnig
2005-06-29 10:42 ` Domen Puncer
2005-06-29 11:01 ` [KJ] [PATCH 2.6.12] [RESEND] /proc/tty/driver/* filtering for walter harms
2005-06-30 13:01 ` [KJ] [PATCH 2.6.12] [RESEND] /proc/tty/driver/* filtering for non Daniel Smertnig
2005-06-30 13:05 ` Daniel Smertnig
2005-06-30 13:48 ` Domen Puncer
2005-06-30 13:56 ` Daniel Smertnig
2005-06-30 15:50 ` Domen Puncer
2005-06-30 17:23 ` Daniel Smertnig
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.