On Wed, Feb 09, 2011 at 07:15:45AM +0900, Simon Horman wrote:
> On Tue, Feb 08, 2011 at 05:20:36PM +0200, Ahmed S. Darwish wrote:
> > 
> > diff --git a/kexec/arch/i386/kexec-bzImage.c 
> > b/kexec/arch/i386/kexec-bzImage.c
> > index 83d3a69..2312eb8 100644
> > --- a/kexec/arch/i386/kexec-bzImage.c
> > +++ b/kexec/arch/i386/kexec-bzImage.c
> > @@ -43,32 +43,32 @@ static const int probe_debug = 0;
> >  
> >  int bzImage_probe(const char *buf, off_t len)
> >  {
> > -   struct x86_linux_header header;
> > +   const struct x86_linux_header *header;
> >     if ((uintmax_t)len < (uintmax_t)sizeof(header)) {
> >             return -1;
> >     }
> > -   memcpy(&header, buf, sizeof(header));
> > -   if (memcmp(header.header_magic, "HdrS", 4) != 0) {
> > +   header = (void *)buf;
> 
> Perhaps casting to (struct x86_linux_header*) would read better?
> 

I felt that '(const struct x86_linux_header *)' is a bit long, but it's
not a big deal. Attached is the same patch with that line modified:

==>

Don't wholeheartedly copy the 32-Kbytes bzImage header area to the stack,
just use a constant pointer instead.

Signed-off-by: Ahmed S. Darwish <[email protected]>
---

diff --git a/kexec/arch/i386/kexec-bzImage.c b/kexec/arch/i386/kexec-bzImage.c
index 83d3a69..29e9165 100644
--- a/kexec/arch/i386/kexec-bzImage.c
+++ b/kexec/arch/i386/kexec-bzImage.c
@@ -43,32 +43,32 @@ static const int probe_debug = 0;
 
 int bzImage_probe(const char *buf, off_t len)
 {
-       struct x86_linux_header header;
+       const struct x86_linux_header *header;
        if ((uintmax_t)len < (uintmax_t)sizeof(header)) {
                return -1;
        }
-       memcpy(&header, buf, sizeof(header));
-       if (memcmp(header.header_magic, "HdrS", 4) != 0) {
+       header = (const struct x86_linux_header *)buf;
+       if (memcmp(header->header_magic, "HdrS", 4) != 0) {
                if (probe_debug) {
                        fprintf(stderr, "Not a bzImage\n");
                }
                return -1;
        }
-       if (header.boot_sector_magic != 0xAA55) {
+       if (header->boot_sector_magic != 0xAA55) {
                if (probe_debug) {
                        fprintf(stderr, "No x86 boot sector present\n");
                }
                /* No x86 boot sector present */
                return -1;
        }
-       if (header.protocol_version < 0x0200) {
+       if (header->protocol_version < 0x0200) {
                if (probe_debug) {
                        fprintf(stderr, "Must be at least protocol version 
2.00\n");
                }
                /* Must be at least protocol version 2.00 */
                return -1;
        }
-       if ((header.loadflags & 1) == 0) {
+       if ((header->loadflags & 1) == 0) {
                if (probe_debug) {
                        fprintf(stderr, "zImage not a bzImage\n");
                }

thanks,

-- 
Darwish
http://darwish.07.googlepages.com

_______________________________________________
kexec mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/kexec

Reply via email to