[ofa-general] Re: [PATCH] osm: source and destination strings overlap when using sprintf()

Yevgeny Kliteynik kliteyn at dev.mellanox.co.il
Tue Apr 24 15:11:47 PDT 2007


Michael S. Tsirkin wrote:
>> Quoting Yevgeny Kliteynik <kliteyn at dev.mellanox.co.il>:
>> Subject: [PATCH] osm: source and destination strings overlap when using sprintf()
>>
>> Hi Hal,
>>
>> Fixing a problematic usage of sprintf() in osm_helper.c:
>>
>> When using sprintf(), source and destination strings should
>> not overlap, otherwise the function behavior is undefined.
>>
>> Please apply to ofed_1_2 and to master.
>>
>> Thanks.
>>
>> -- Yevgeny
>>
>> Signed-off-by: Yevgeny Kliteynik <kliteyn at dev.mellanox.co.il>
>> ---
>> osm/opensm/osm_helper.c |   47 
>> ++++++++++++++++++++++++++++++++++-------------
>> 1 files changed, 34 insertions(+), 13 deletions(-)
> 
> .... skip ...
> 	
>>     for (i = 0; i < 32; i++)
>> -      sprintf( buf_line2,"%s 0x%01X |",
>> -               buf_line2, p_vla_tbl->vl_entry[i].weight);
>> +    {
>> +      sprintf( tmp_buf_line," 0x%01X |",
>> +               p_vla_tbl->vl_entry[i].weight);
>> +      strcat( buf_line2, tmp_buf_line );
>> +    }
>>     osm_log( p_log, log_level,
>>              "VlArb dump:\n"
>>              "\t\t\tport_guid...........0x%016" PRIx64 "\n"
> 
> These tmp-bufs are quite ugly, and bloat the code up.
> Since you seem to do a strcat which does an anyway, how about, for example:
> 
> -      sprintf( buf_line1,"%s 0x%01x |",
> -               buf_line1, p_vla_tbl->vl_entry[i].vl);
> +      sprintf( buf_line1 + strlen(buf_line1)," 0x%01x |",
> +               p_vla_tbl->vl_entry[i].vl);
> 
> and so on in all the other places?

Agree.
I'll send a new patch later.

-- Yevgeny
 




More information about the general mailing list