edac: sb_edac: add sanity check to silence static checker
Subsystems (3)
PATCH 1/1 edac: sb_edac: add sanity check to silence static checker
I assume the the check on if (limit <= prv) prevents n_tads from actually reaching MAX_TAD. The problem with that is that it relies on the hardware returning the right value and Smatch complains that if it doesn't we could have a buffer overflow.
---
Feel free to ignore this patch if you want. I don't have very stong feelings about this either way.
drivers/edac/sb_edac.c +6 -0
@@ -970,6 +970,12 @@ static int get_memory_error_data(struct mem_ctl_info *mci,break ; prv = limit; } +if (n_tads =MAX_TAD ) { +sprintf (msg,"Could not discover the memory channel" ); +edac_mc_handle_ce_no_info (mci, msg); +return -EINVAL ; + } + ch_way =TAD_CH (reg) +1 ; sck_way =TAD_SOCK (reg) +1 ;/*
Am 01.11.2011 07:28, schrieb Dan Carpenter:
Quoted 15 lines
I assume the the check on if (limit <= prv) prevents
n_tadsfrom actually reachingMAX_TAD. The problem with that is that it relies on the hardware returning the right value and Smatch complains that if it doesn't we could have a buffer overflow.Signed-off-by Dan Carpenter <[email protected]>---
Feel free to ignore this patch if you want. I don't have very stong feelings about this either way.drivers/edac/sb_edac.c +0
-0
drivers/edac/sb_edac.c static int get_memory_error_data(struct mem_ctl_info *mci, · line 974
Quoted 5 lines
drivers/edac/sb_edac.c +2
-0@@ -970,6 +970,12 @@ static int get_memory_error_data(struct mem_ctl_info *mci,break ; prv = limit; } +if (n_tads =MAX_TAD ) { +sprintf (msg,"Could not discover the memory channel" );
why the sprintf() ? can you not simply:
edac_mc_handle_ce_no_info(mci,"Could not discover the memory channel"); re,
wh
Quoted 7 lines
drivers/edac/sb_edac.c +4
-0+edac_mc_handle_ce_no_info (mci, msg); +return -EINVAL ; + } + ch_way =TAD_CH (reg) +1 ; sck_way =TAD_SOCK (reg) +1 ;/*
Em 01-11-2011 10:32, walter harms escreveu:
Quoted 25 lines
Am 01.11.2011 07:28, schrieb Dan Carpenter:
Quoted 15 lines
I assume the the check on if (limit <= prv) prevents
n_tadsfrom actually reachingMAX_TAD. The problem with that is that it relies on the hardware returning the right value and Smatch complains that if it doesn't we could have a buffer overflow.Signed-off-by Dan Carpenter <[email protected]>---
Feel free to ignore this patch if you want. I don't have very stong feelings about this either way.drivers/edac/sb_edac.c +0
-0drivers/edac/sb_edac.c static int get_memory_error_data(struct mem_ctl_info *mci, · line 974
Quoted 5 lines
drivers/edac/sb_edac.c +2
-0@@ -970,6 +970,12 @@ static int get_memory_error_data(struct mem_ctl_info *mci,break ; prv = limit; } +if (n_tads =MAX_TAD ) { +sprintf (msg,"Could not discover the memory channel" );why the
sprintf()? can you not simply:
Quoted 1 line
edac_mc_handle_ce_no_info(mci,"Could not discover the memory channel");
Yes, please us the edac-specific call. I'm working on some patches that will provide an additional functionality to those edac report calls. So, using sprintf() won't do the right thing after applying those patches (likely for Kernel v3.3).
Quoted 10 lines
re,wh
Quoted 7 lines
drivers/edac/sb_edac.c +4
-0+edac_mc_handle_ce_no_info (mci, msg); +return -EINVAL ; + } + ch_way =TAD_CH (reg) +1 ; sck_way =TAD_SOCK (reg) +1 ;/*
Quoted 12 lines · Mauro Carvalho Chehab
Quoted 11 lines
drivers/edac/sb_edac.c static int get_memory_error_data(struct mem_ctl_info *mci, · line 974
Quoted 8 lines
drivers/edac/sb_edac.c +2
-0@@ -970,6 +970,12 @@ static int get_memory_error_data(struct mem_ctl_info *mci,break ; prv = limit; } +if (n_tads ==MAX_TAD ) { +sprintf (msg,"Could not discover the memory channel" );why the
sprintf()? can you not simply:edac_mc_handle_ce_no_info(mci,"Could not discover the memory channel");
Quoted 5 lines
Yes, please us the edac-specific call. I'm working on some patches that will provide an additional functionality to those edac report calls. So, using
sprintf()won't do the right thing after applying those patches (likely for Kernel v3.3).
I did use the edac-specific call. Walter is saying that thesprintf() is not needed because I could just pass the string
directly. That's true enough, but I'd prefer to leave it how I wrote it so it matches everything else in this file. Also passing it directly as edac_mc_handle_ce_no_info(mci,"Could not discover the memory channel"); makes the line too long for the 80 character limit so someone will complain if I do that. This isn't a fast path so the sprintf() doesn't hurt anything.
Also looking at it now, I suspect this patch might be a bug fix instead of just to silence the warning. We have a similar check for the MAX_SAD loop earlier to the check that I added here for MAX_TAD.
regards,
dan carpenter