sign-file: Fix inplace signing when src and dst names are both specified
authorAlex Yashchenko <alexhoppus111@gmail.com>
Tue, 13 Dec 2016 09:26:25 +0000 (09:26 +0000)
committerHerbert Xu <herbert@gondor.apana.org.au>
Wed, 14 Dec 2016 10:33:14 +0000 (18:33 +0800)
When src and dst both are specified and they point to the same file
the sign-file utility will write only signature to the dst file and
the module (.ko file) body will not be written.
That happens because we open the same file with "rb" and "wb" flags,
from fopen man:

 w      Truncate file to zero length or create text file for writing.
The stream is positioned at the beginning of the file.
...
bm = BIO_new_file(module_name, "rb");
...
bd = BIO_new_file(dest_name, "wb");
...
while ((n = BIO_read(bm, buf, sizeof(buf))),
       n > 0) {
ERR(BIO_write(bd, buf, n) < 0, "%s", dest_name);
}
...

Signed-off-by: Alex Yashchenko <alexhoppus111@gmail.com>
Signed-off-by: David Howells <dhowells@redhat.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
scripts/sign-file.c

index 53af6dc3e6c1779fbde3c5a641a880f52aa768e5..19ec468b1168f4bf209e333bc194088257716960 100755 (executable)
@@ -267,7 +267,7 @@ int main(int argc, char **argv)
        }
        x509_name = argv[2];
        module_name = argv[3];
-       if (argc == 5) {
+       if (argc == 5 && strcmp(argv[3], argv[4]) != 0) {
                dest_name = argv[4];
                replace_orig = false;
        } else {