2013-09-16 23:37:27

by Kees Cook

[permalink] [raw]
Subject: [PATCH] dvb: fix potential format string leak

Make sure that a format string cannot accidentally leak into the printk
buffer.

Signed-off-by: Kees Cook <[email protected]>
---
drivers/media/dvb-frontends/dib9000.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/media/dvb-frontends/dib9000.c b/drivers/media/dvb-frontends/dib9000.c
index 6201c59..61b2cfe 100644
--- a/drivers/media/dvb-frontends/dib9000.c
+++ b/drivers/media/dvb-frontends/dib9000.c
@@ -649,7 +649,7 @@ static int dib9000_risc_debug_buf(struct dib9000_state *state, u16 * data, u8 si
b[2 * (size - 2) - 1] = '\0'; /* Bullet proof the buffer */
if (*b == '~') {
b++;
- dprintk(b);
+ dprintk("%s", b);
} else
dprintk("RISC%d: %d.%04d %s", state->fe_id, ts / 10000, ts % 10000, *b ? b : "<emtpy>");
return 1;
--
1.7.9.5


--
Kees Cook
Chrome OS Security


2013-09-16 23:49:01

by Joe Perches

[permalink] [raw]
Subject: Re: [PATCH] dvb: fix potential format string leak

On Mon, 2013-09-16 at 16:37 -0700, Kees Cook wrote:
> Make sure that a format string cannot accidentally leak into the printk
> buffer.
[]
> diff --git a/drivers/media/dvb-frontends/dib9000.c b/drivers/media/dvb-frontends/dib9000.c
[]
> @@ -649,7 +649,7 @@ static int dib9000_risc_debug_buf(struct dib9000_state *state, u16 * data, u8 si
> b[2 * (size - 2) - 1] = '\0'; /* Bullet proof the buffer */
> if (*b == '~') {
> b++;
> - dprintk(b);
> + dprintk("%s", b);
> } else
> dprintk("RISC%d: %d.%04d %s", state->fe_id, ts / 10000, ts % 10000, *b ? b : "<emtpy>");
> return 1;

This looks odd.

Perhaps this should be:

if (*b == '~')
b++;
dprintk("etc...);

It'd be nice to fix the <empty> typo too.

2013-09-30 16:20:50

by Michael Ira Krufky

[permalink] [raw]
Subject: Re: [PATCH] dvb: fix potential format string leak

On Mon, Sep 16, 2013 at 7:48 PM, Joe Perches <[email protected]> wrote:
> On Mon, 2013-09-16 at 16:37 -0700, Kees Cook wrote:
>> Make sure that a format string cannot accidentally leak into the printk
>> buffer.
> []
>> diff --git a/drivers/media/dvb-frontends/dib9000.c b/drivers/media/dvb-frontends/dib9000.c
> []
>> @@ -649,7 +649,7 @@ static int dib9000_risc_debug_buf(struct dib9000_state *state, u16 * data, u8 si
>> b[2 * (size - 2) - 1] = '\0'; /* Bullet proof the buffer */
>> if (*b == '~') {
>> b++;
>> - dprintk(b);
>> + dprintk("%s", b);
>> } else
>> dprintk("RISC%d: %d.%04d %s", state->fe_id, ts / 10000, ts % 10000, *b ? b : "<emtpy>");
>> return 1;
>
> This looks odd.
>
> Perhaps this should be:
>
> if (*b == '~')
> b++;
> dprintk("etc...);
>
> It'd be nice to fix the <empty> typo too.

This *does* look odd, I agree. Meanwhile, I do believe this patch
leaves things better than before. I'm going to merge Kees' patch for
now, but it would be nice to see a better cleanup for that code block.

-Mike Krufky