<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<style type="text/css" style="display:none;"><!-- P {margin-top:0;margin-bottom:0;} --></style>
</head>
<body dir="ltr">
<div id="divtagdefaultwrapper" style="font-size:12pt;color:#000000;font-family:Calibri,Helvetica,sans-serif;" dir="ltr">
<div id="divtagdefaultwrapper" dir="ltr" style="font-size:12pt; color:rgb(0,0,0); font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<p>Hi, <span style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols; font-size:13.3333px">Lianbo</span></p>
<p><br>
</p>
<span style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols; font-size:13.3333px">> For the checking condition, I would recommend using the following methods,
 what do you think?</span><br style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols; font-size:13.3333px">
<span style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols; font-size:13.3333px">></span><br style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols; font-size:13.3333px">
<span style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols; font-size:13.3333px">> +               if (size != SAFE_NETDUMP_ELF_HEADER_SIZE &&</span><br style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols; font-size:13.3333px">
<span style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols; font-size:13.3333px">> +                   size != MIN_NETDUMP_ELF_HEADER_SIZE) {</span></div>
<div id="divtagdefaultwrapper" dir="ltr" style="font-size:12pt; color:rgb(0,0,0); font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<span style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols; font-size:13.3333px"></span><br style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols; font-size:13.3333px">
I agrre with <span>Kazu, if use "<span style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 13.3333px;">size != MIN_NETDUMP_ELF_HEADER_SIZE/<span style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 13.3333px;">SAFE_NETDUMP_ELF_HEADER_SIZE" 
 this issue can not be fixed, size </span></span></span><span style="font-size: 13.3333px;">is equal to or more </span><span style="font-size: 13.3333px;">than MIN_NETDUMP_ELF_HEADER_SIZE is valid.</span><span><span style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 13.3333px;"><span style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 13.3333px;"><br>
</span></span></span><br>
<span style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 13.3333px;">> In addition, would you mind updating another error output
 in the is_netdump()? For example:</span><br style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 13.3333px;">
<span style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 13.3333px;">></span><br style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 13.3333px;">
<span style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 13.3333px;">>          size = SAFE_NETDUMP_ELF_HEADER_SIZE;</span><br style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 13.3333px;">
<span style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 13.3333px;">>          if ((eheader = (char *)malloc(size)) == NULL) {</span><br style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 13.3333px;">
<span style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 13.3333px;">> -                fprintf(stderr, "cannot malloc minimum ELF
 header buffer\n");</span><br style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 13.3333px;">
<span style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 13.3333px;">> +                fprintf(stderr, "cannot malloc ELF header
 buffer\n");</span><br style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 13.3333px;">
<span style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 13.3333px;">>                  clean_exit(1);</span><br style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 13.3333px;">
<span style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 13.3333px;">>          }</span></div>
<div id="divtagdefaultwrapper" dir="ltr" style="font-size:12pt; color:rgb(0,0,0); font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<span style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 13.3333px;"></span><br style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 13.3333px;">
Ok.</div>
<div id="divtagdefaultwrapper" dir="ltr" style="font-size:12pt; color:rgb(0,0,0); font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<br>
</div>
<div id="divtagdefaultwrapper" dir="ltr" style="font-size:12pt; color:rgb(0,0,0); font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
How about below patch set?</div>
<div id="divtagdefaultwrapper" dir="ltr" style="font-size:12pt; color:rgb(0,0,0); font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<br>
</div>
<div id="divtagdefaultwrapper" dir="ltr" style="font-size:12pt; color:rgb(0,0,0); font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<div>From 5ec6ac06ba7fd32e96463a54ebc3f733f1054a90 Mon Sep 17 00:00:00 2001                                     </div>
<div>From: Qianli Zhao <zhaoqianli@xiaomi.com></div>
<div>Date: Mon, 30 Nov 2020 17:17:32 +0800</div>
<div>Subject: [PATCH] netdump: fix regression for tiny kdump files</div>
<div><br>
</div>
<div>Commit f42db6a33f0e ("Support core files with "unusual" layout")</div>
<div>increased the minimal file size from MIN_NETDUMP_ELF_HEADER_SIZE to</div>
<div>SAFE_NETDUMP_ELF_HEADER_SIZE which can lead to crash rejecting</div>
<div>raw RAM dumpfiles</div>
<div><br>
</div>
<div>Fix that by erroring out only if we get less than</div>
<div>MIN_NETDUMP_ELF_HEADER_SIZE bytes.</div>
<div><br>
</div>
<div>Signed-off-by: Qianli Zhao <zhaoqianli@xiaomi.com></div>
<div>---</div>
<div> netdump.c | 11 ++++++++---</div>
<div> 1 file changed, 8 insertions(+), 3 deletions(-)</div>
<div><br>
</div>
<div>diff --git a/netdump.c b/netdump.c</div>
<div>index c76d9dd..ca9b459 100644</div>
<div>--- a/netdump.c</div>
<div>+++ b/netdump.c</div>
<div>@@ -119,7 +119,8 @@ is_netdump(char *file, ulong source_query)</div>
<div>        Elf64_Phdr *load64;</div>
<div>        char *eheader, *sect0;</div>
<div>        char buf[BUFSIZE];</div>
<div>-       size_t size, len, tot;</div>
<div>+       ssize_t size;</div>
<div>+       size_t len, tot;</div>
<div>         Elf32_Off offset32;</div>
<div>         Elf64_Off offset64;</div>
<div>        ulong format;</div>
<div>@@ -134,7 +135,7 @@ is_netdump(char *file, ulong source_query)</div>
<div> </div>
<div>        size = SAFE_NETDUMP_ELF_HEADER_SIZE;</div>
<div>         if ((eheader = (char *)malloc(size)) == NULL) {</div>
<div>-                fprintf(stderr, "cannot malloc minimum ELF header buffer\n");</div>
<div>+                fprintf(stderr, "cannot malloc ELF header buffer\n");</div>
<div>                 clean_exit(1);</div>
<div>         }</div>
<div> </div>
<div>@@ -142,10 +143,14 @@ is_netdump(char *file, ulong source_query)</div>
<div>                if (!read_flattened_format(fd, 0, eheader, size))</div>
<div>                        goto bailout;</div>
<div>        } else {</div>
<div>-               if (read(fd, eheader, size) != size) {</div>
<div>+               size = read(fd, eheader, size);</div>
<div>+               if (size < 0) {</div>
<div>                        sprintf(buf, "%s: ELF header read", file);</div>
<div>                        perror(buf);</div>
<div>                        goto bailout;</div>
<div>+               } else if (size < MIN_NETDUMP_ELF_HEADER_SIZE) {</div>
<div>+                       fprintf(stderr, "%s: file too small!\n", file);</div>
<div>+                       goto bailout;</div>
<div>                }</div>
<div>        }</div>
<div> </div>
<div>-- </div>
<div>2.7.4</div>
<div><br>
</div>
<br>
<div style="color:rgb(0,0,0)">
<div>
<hr tabindex="-1" style="display:inline-block; width:98%">
<div id="x_divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" color="#000000" style="font-size:11pt"><b>From:</b> HAGIO KAZUHITO(萩尾 一仁) <k-hagio-ab@nec.com><br>
<b>Sent:</b> Tuesday, December 22, 2020 9:14<br>
<b>To:</b> Discussion list for crash utility usage, maintenance and development<br>
<b>Cc:</b> 赵乾利<br>
<b>Subject:</b> [External Mail]RE: [Crash-utility] [PATCH V2] netdump: fix regression for tiny kdump files</font>
<div> </div>
</div>
</div>
<font size="2"><span style="font-size:10pt">
<div class="PlainText">*外部邮件,谨慎处理 | This message originated from outside of XIAOMI. Please treat this email with caution*<br>
<br>
<br>
Hi Lianbo,<br>
<br>
> -----Original Message-----<br>
> From: crash-utility-bounces@redhat.com <crash-utility-bounces@redhat.com> On Behalf Of lijiang<br>
> Sent: Monday, December 21, 2020 11:42 PM<br>
> To: crash-utility@redhat.com; zhaoqianli@xiaomi.com<br>
> Subject: Re: [Crash-utility] [PATCH V2] netdump: fix regression for tiny kdump files<br>
><br>
> Hi, Qianli<br>
><br>
> Thanks for the patch.<br>
> 在 2020年12月01日 14:45, crash-utility-request@redhat.com 写道:<br>
> > Date: Tue,  1 Dec 2020 10:56:02 +0800<br>
> > From: Qianli Zhao <zhaoqianligood@gmail.com><br>
> > To: crash-utility@redhat.com, minipli@grsecurity.net<br>
> > Subject: [Crash-utility] [PATCH V2] netdump: fix regression for tiny<br>
> >     kdump   files<br>
> > Message-ID:<br>
> >     <1606791362-5604-1-git-send-email-zhaoqianligood@gmail.com><br>
> > Content-Type: text/plain; charset="US-ASCII"<br>
> ><br>
> > From: Qianli Zhao <zhaoqianli@xiaomi.com><br>
> ><br>
> > Commit f42db6a33f0e ("Support core files with "unusual" layout")<br>
> > increased the minimal file size from MIN_NETDUMP_ELF_HEADER_SIZE to<br>
> > SAFE_NETDUMP_ELF_HEADER_SIZE which lead to crash rejecting very<br>
> > small kdump files.<br>
> ><br>
> Good findings.<br>
><br>
> > Fix that by erroring out only if we get less than<br>
> > MIN_NETDUMP_ELF_HEADER_SIZE bytes.<br>
> ><br>
> > Signed-off-by: Qianli Zhao <zhaoqianli@xiaomi.com><br>
> > ---<br>
> > - Update commit message<br>
> > - Add more accurate judgment of read() return value<br>
> > ---<br>
> >  netdump.c | 9 +++++++--<br>
> >  1 file changed, 7 insertions(+), 2 deletions(-)<br>
> ><br>
> > diff --git a/netdump.c b/netdump.c<br>
> > index c76d9dd..9a36931 100644<br>
> > --- a/netdump.c<br>
> > +++ b/netdump.c<br>
> > @@ -119,7 +119,8 @@ is_netdump(char *file, ulong source_query)<br>
> >     Elf64_Phdr *load64;<br>
> >     char *eheader, *sect0;<br>
> >     char buf[BUFSIZE];<br>
> > -   size_t size, len, tot;<br>
> > +   ssize_t size;<br>
> > +   size_t len, tot;<br>
> >          Elf32_Off offset32;<br>
> >          Elf64_Off offset64;<br>
> >     ulong format;<br>
> > @@ -142,10 +143,14 @@ is_netdump(char *file, ulong source_query)<br>
> >             if (!read_flattened_format(fd, 0, eheader, size))<br>
> >                     goto bailout;<br>
> >     } else {<br>
> > -           if (read(fd, eheader, size) != size) {<br>
> > +           size = read(fd, eheader, size);<br>
> > +           if (size < 0) {<br>
> >                     sprintf(buf, "%s: ELF header read", file);<br>
> >                     perror(buf);<br>
> >                     goto bailout;<br>
> > +           } else if (size < MIN_NETDUMP_ELF_HEADER_SIZE) {<br>
><br>
> For the checking condition, I would recommend using the following methods, what do you think?<br>
><br>
> +               if (size != SAFE_NETDUMP_ELF_HEADER_SIZE &&<br>
> +                   size != MIN_NETDUMP_ELF_HEADER_SIZE) {<br>
>                         sprintf(buf, "%s: ELF header read", file);<br>
>                         perror(buf);<br>
>                         goto bailout;<br>
>                 }<br>
<br>
Do you mean putting "size < 0" and "size < MIN_NETDUMP_ELF_HEADER SIZE"<br>
together?  I think it would be good to separate an read error and a format<br>
error for better debugging.<br>
<br>
And according to ramdump_to_elf(), the size of an ELF header from a RAM<br>
dumpfile varies depending on the number of nodes, and is equal to or more<br>
than MIN_NETDUMP_ELF_HEADER_SIZE if valid.  Actually, the value that Qianli<br>
showed before was 232 [1], which is not either SAFE_NETDUMP_ELF_HEADER_SIZE(304)<br>
or MIN_NETDUMP_ELF_HEADER_SIZE(176).<br>
<br>
[1] <a href="https://www.redhat.com/archives/crash-utility/2020-November/msg00080.html" id="LPlnk138310" previewremoved="true">
https://www.redhat.com/archives/crash-utility/2020-November/msg00080.html</a><br>
<br>
Thanks,<br>
Kazu<br>
<br>
><br>
><br>
> In addition, would you mind updating another error output in the is_netdump()? For example:<br>
><br>
>          size = SAFE_NETDUMP_ELF_HEADER_SIZE;<br>
>          if ((eheader = (char *)malloc(size)) == NULL) {<br>
> -                fprintf(stderr, "cannot malloc minimum ELF header buffer\n");<br>
> +                fprintf(stderr, "cannot malloc ELF header buffer\n");<br>
>                  clean_exit(1);<br>
>          }<br>
><br>
> Thanks.<br>
> Lianbo<br>
><br>
> > +                   fprintf(stderr, "%s: file too small!\n", file);<br>
> > +                   goto bailout;<br>
> >             }<br>
> >     }<br>
> ><br>
> > -- 2.7.4<br>
><br>
> --<br>
> Crash-utility mailing list<br>
> Crash-utility@redhat.com<br>
> <a href="https://www.redhat.com/mailman/listinfo/crash-utility" id="LPlnk803508" previewremoved="true">
https://www.redhat.com/mailman/listinfo/crash-utility</a><br>
</div>
</span></font></div>
</div>
</div>
#/******本邮件及其附件含有小米公司的保密信息,仅限于发送给上面地址中列出的个人或群组。禁止任何其他人以任何形式使用(包括但不限于全部或部分地泄露、复制、或散发)本邮件中的信息。如果您错收了本邮件,请您立即电话或邮件通知发件人并删除本邮件! This e-mail and its attachments contain confidential information from XIAOMI, which is intended only for the person or entity whose address
 is listed above. Any use of the information contained herein in any way (including, but not limited to, total or partial disclosure, reproduction, or dissemination) by persons other than the intended recipient(s) is prohibited. If you receive this e-mail in
 error, please notify the sender by phone or email immediately and delete it!******/#
</body>
</html>