Hello James,

On 12/05/2011 06:47 AM, James Harper wrote:
> The crash I describe below is caused by an off-by-one error in
> accurate.c...
>
> In accurate_cmd, a blank chksum is not included in the length passed to
> accurate_add_file, but in accurate_add_file, the blank chksum takes up
> one byte and so will trigger the overrun detection if the buffer happens
> to be the last in the "big buf", which is the case in my crash.
>
> This crash would occur only when:
> . chksum is blank
> . accurate entry is last in the "big buf"
> . accurate entry size == "big buf" remaining and so an overrun overruns
> "big buf"
>
> The following patch fixes the bug for me:

Thanks to pin this problem, I think that allocating 1 extra byte as we 
did in the previous version will handle this problem.

Unfortunately, the previous code was :
    /* TODO: see if len contains already the 3 \0 */
    item = (CurFile *)jcr->file_list->hash_malloc(sizeof(CurFile)+len+3);

And the new code is
    item = (CurFile *)jcr->file_list->hash_malloc(sizeof(CurFile)+len);

This is a serious issue that was easy to avoid... :(

Thanks


> diff --git a/bacula/src/filed/accurate.c b/bacula/src/filed/accurate.c
> index 3a043a3..a8446c9 100644
> --- a/bacula/src/filed/accurate.c
> +++ b/bacula/src/filed/accurate.c
> @@ -223,8 +223,13 @@ static bool accurate_add_file(JCR *jcr, uint32_t
> len,
>      item->lstat  = item->fname+strlen(item->fname)+1;
>      strcpy(item->lstat, lstat);
>
> -   item->chksum = item->lstat+strlen(item->lstat)+1;
> -   strcpy(item->chksum, chksum);
> +   if (!strlen(chksum)) {
> +      /* re-use the null at the end of lstat */
> +      item->chksum = item->lstat+strlen(item->lstat);
> +   } else {
> +      item->chksum = item->lstat+strlen(item->lstat)+1;
> +      strcpy(item->chksum, chksum);
> +   }
>
>      item->delta_seq = delta;
>
> James
>
>> -----Original Message-----
>> From: James Harper
>> Sent: Monday, 5 December 2011 3:08 PM
>> To: James Harper; bacula-devel@lists.sourceforge.net
>> Subject: RE: [Bacula-devel] crash in 5.2.2
>>
>>>
>>> I'm getting a consistent crash on one Windows 2008 R2 server:
>>>
>>> 05-Dec 12:50 bitdc1-fd: ABORTING due to ERROR in
>>> /home/kern/bacula/k/bacula/src/lib/smartall.c:216
>>> Overrun buffer: len=9830441 addr=40d0068 allocated:
>>> /home/kern/bacula/k/bacula/src/lib/htable.c:72 called from
>>> /home/kern/bacula/k/bacula/src/lib/htable.c:91
>>>
>>
>> This is happening at the end of the accurate 'seen' code I think:
>>
>> bitdc1-fd: /home/kern/bacula/k/bacula/src/lib/htable.c:79-0 malloc
>> buf=4070068 size=9830400 rem=9830376
>> bitdc1-fd: /home/kern/bacula/k/bacula/src/lib/htable.c:112-0 Created
> new
>> big buffer of 9830400 bytes
>> bitdc1-fd: /home/kern/bacula/k/bacula/src/filed/accurate.c:234-0 add
>> fname=<C:/Windows/winsxs/amd64_microsoft-windows-mediaplayer-
>> core_31bf3856ad364e35_6.1.7600.16385_none_675eb4c668cac03c/WMPPlay
>> er-ppdlic.xrm-ms>  lstat=A A IH/ B A A A wz A A BKW+Ue BKW+Ue BKW+Ue A
>> A M  delta_seq=0 chksum=
>> bitdc1-fd: /home/kern/bacula/k/bacula/src/filed/accurate.c:234-0 add
>> fname=<C:/Windows/winsxs/amd64_microsoft-windows-mediaplayer-
>> core_31bf3856ad364e35_6.1.7600.16385_none_675eb4c668cac03c/wmpshar
>> e.exe>  lstat=A A IH/ B A A A ZIA A A BKW9AA BKW+Hs BKW9AA A A M
>> delta_seq=0 chksum=
>> bitdc1-fd: /home/kern/bacula/k/bacula/src/filed/accurate.c:234-0 add
>> fname=<C:/Windows/winsxs/amd64_microsoft-windows-mediaplayer-
>> core_31bf3856ad364e35_6.1.7600.16385_none_675eb4c668cac03c/>  lstat=A
>> A EH/ B A A A A A A BKXBkT BKXBkT BKXBkR A A M  delta_seq=0 chksum=
>> bitdc1-fd: /home/kern/bacula/k/bacula/src/filed/accurate.c:234-0 add
>> fname=<C:/Windows/winsxs/amd64_microsoft-windows-mediaplayer-
>> core_31bf3856ad364e35_6.1.7600.16415_none_67aa66206891f9cc/avtranspo
>> rt.xml>  lstat=A A IH/ B A A A E2C A A BKW9BW BKMB1Y BKW9BW A A M
>> delta_seq=0 chksum=
>> bitdc1-fd: /home/kern/bacula/k/bacula/src/filed/accurate.c:234-0 add
>> fname=<C:/Windows/winsxs/amd64_microsoft-windows-mediaplayer-
>> core_31bf3856ad364e35_6.1.7600.16415_none_67aa66206891f9cc/connectio
>> nmanager_dmr.xml>  lstat=A A IH/ B A A A BT/ A A BKW9BW BKMB1Y
>> BKW9BW A A M  delta_seq=0 chksum=
>> bitdc1-fd: /home/kern/bacula/k/bacula/src/filed/accurate.c:234-0 add
>> fname=<C:/Windows/winsxs/amd64_microsoft-windows-mediaplayer-
>> core_31bf3856ad364e35_6.1.7600.16415_none_67aa66206891f9cc/DMR_120.
>> jpg>  lstat=A A IH/ B A A A uj A A BKW9BW BKMB1W BKW9BW A A M
>> delta_seq=0 chksum= ...
>> bitdc1-fd: /home/kern/bacula/k/bacula/src/filed/accurate.c:159-0
> deleted
>> fname=C:/Windows/SoftwareDistribution/Download/f0c6519c2159e158a5a6
>> 809e0034014a/cbshandler/state seen=0
>> bitdc1-fd: /home/kern/bacula/k/bacula/src/filed/accurate.c:159-0
> deleted
>> fname=C:/ProgramData/Microsoft/Windows/WER/ReportQueue/Critical_6.1
>> .7601_6d9bc88e5a3ea1e6a04e40309422f28fc0f47026_070c770d/Report.wer
>> seen=0
>> bitdc1-fd: /home/kern/bacula/k/bacula/src/filed/accurate.c:159-0
> deleted
>> fname=C:/Users/administrator.SBSSWG/AppData/Local/Microsoft/Windows
>> /Temporary Internet Files/Content.IE5/V3S0WCGX/french-flag[1].jpg
>> seen=0
>> bitdc1-fd: /home/kern/bacula/k/bacula/src/lib/htable.c:90-0 free
> malloc
>> buf=49e0068
>> bitdc1-fd: /home/kern/bacula/k/bacula/src/lib/htable.c:90-0 free
> malloc
>> buf=4070068<crash here>
>>
>> Am I reading correctly that Bacula allocated a buffer of 9830400 bytes
> in
>> length but then went 41 bytes over the end?
>>
>> James
>
>
> ------------------------------------------------------------------------------
> All the data continuously generated in your IT infrastructure
> contains a definitive record of customers, application performance,
> security threats, fraudulent activity, and more. Splunk takes this
> data and makes sense of it. IT sense. And common sense.
> http://p.sf.net/sfu/splunk-novd2d
> _______________________________________________
> Bacula-devel mailing list
> Bacula-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/bacula-devel


-- 
Need professional help and support for Bacula ?
Visit http://www.baculasystems.com

------------------------------------------------------------------------------
All the data continuously generated in your IT infrastructure 
contains a definitive record of customers, application performance, 
security threats, fraudulent activity, and more. Splunk takes this 
data and makes sense of it. IT sense. And common sense.
http://p.sf.net/sfu/splunk-novd2d
_______________________________________________
Bacula-devel mailing list
Bacula-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bacula-devel

Reply via email to