Skip to content

Commit

Permalink
reiserfs: add locking around error buffer
Browse files Browse the repository at this point in the history
The formatting of the error buffer is race prone. It uses static buffers
for both formatting and output. While overwriting the error buffer
can product garbled output, overwriting the format buffer with incompatible
% directives can cause crashes.

Signed-off-by: Jeff Mahoney <jeffm@suse.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
  • Loading branch information
Jeff Mahoney authored and Linus Torvalds committed Mar 30, 2009
1 parent fd7cb03 commit 78b6513
Showing 1 changed file with 4 additions and 1 deletion.
5 changes: 4 additions & 1 deletion fs/reiserfs/prints.c
Original file line number Diff line number Diff line change
Expand Up @@ -184,14 +184,16 @@ static char *is_there_reiserfs_struct(char *fmt, int *what)
printk ("bad key %lu %lu %lu %lu", key->k_dir_id, key->k_objectid,
key->k_offset, key->k_uniqueness);
*/

static DEFINE_SPINLOCK(error_lock);
static void prepare_error_buf(const char *fmt, va_list args)
{
char *fmt1 = fmt_buf;
char *k;
char *p = error_buf;
int what;

spin_lock(&error_lock);

strcpy(fmt1, fmt);

while ((k = is_there_reiserfs_struct(fmt1, &what)) != NULL) {
Expand Down Expand Up @@ -237,6 +239,7 @@ static void prepare_error_buf(const char *fmt, va_list args)
fmt1 = k + 2;
}
vsprintf(p, fmt1, args);
spin_unlock(&error_lock);

}

Expand Down

0 comments on commit 78b6513

Please sign in to comment.