* apt-pkg/contrib/sha1.cc:
authorDavid Miller <davem@davemloft.net>
Tue, 26 Jul 2011 07:00:10 +0000 (09:00 +0200)
committerDavid Kalnischkies <kalnischkies@gmail.com>
Tue, 26 Jul 2011 07:00:10 +0000 (09:00 +0200)
  - fix illegally casts of on-stack buffer to a type requiring more
    alignment than it has resulting in segfaults on sparc (Closes: #634696)

The problem is how sha1.cc codes the SHA1 transform, it illegally
casts the on-stack workspace buffer to a type requiring more
alignment than 'workspace' is actually declared to have.

This only shows up recently because gcc-4.6 now does a really
aggressive optimization where it gets rid of the workspace
buffer entirely and just accesses 'buffer' directly, and assumes
it has the necessary alignment for 32-bit loads (which it
doesn't).

apt-pkg/contrib/sha1.cc
debian/changelog

index eae52d5..abc2aaf 100644 (file)
@@ -74,10 +74,9 @@ static void SHA1Transform(uint32_t state[5],uint8_t const buffer[64])
       uint32_t l[16];
    }
    CHAR64LONG16;
-   CHAR64LONG16 *block;
+   CHAR64LONG16 workspace, *block;
 
-   uint8_t workspace[64];
-   block = (CHAR64LONG16 *)workspace;
+   block = &workspace;
    memcpy(block,buffer,sizeof(workspace));
 
    /* Copy context->state[] to working vars */
index 18b59ec..1eeb57a 100644 (file)
@@ -1,3 +1,12 @@
+apt (0.8.15.4) unstable; urgency=low
+
+  [ David Miller ]
+  * apt-pkg/contrib/sha1.cc:
+    - fix illegally casts of on-stack buffer to a type requiring more
+      alignment than it has resulting in segfaults on sparc (Closes: #634696)
+
+ -- David Kalnischkies <kalnischkies@gmail.com>  Tue, 26 Jul 2011 08:26:53 +0200
+
 apt (0.8.15.3) unstable; urgency=low
 
   [ Michael Vogt ]