All of lore.kernel.org
 help / color / mirror / Atom feed
From: Luca Boccassi <luca.boccassi@gmail.com>
To: Eric Biggers <ebiggers@kernel.org>
Cc: linux-fscrypt@vger.kernel.org
Subject: Re: [fsverity-utils PATCH v2 2/2] Allow to build and run sign/digest on Windows
Date: Thu, 17 Dec 2020 19:12:06 +0000	[thread overview]
Message-ID: <73c70f8bcb6632ab3e161d9b0263bc1563e96b34.camel@gmail.com> (raw)
In-Reply-To: <X9ur8imAGcnv7Xx6@sol.localdomain>

[-- Attachment #1: Type: text/plain, Size: 8201 bytes --]

On Thu, 2020-12-17 at 11:05 -0800, Eric Biggers wrote:
> On Thu, Dec 17, 2020 at 06:44:38PM +0000, Luca Boccassi wrote:
> > On Thu, 2020-12-17 at 10:32 -0800, Eric Biggers wrote:
> > > On Thu, Dec 17, 2020 at 02:47:49PM +0000, luca.boccassi@gmail.com wrote:
> > > > From: Luca Boccassi <luca.boccassi@microsoft.com>
> > > > 
> > > > Add some minimal compat type defs, and stub out the enable/measure
> > > > sources. Also add a way to handle the fact that mingw adds a
> > > > .exe extension automatically in the Makefile install rules, and
> > > > that there is not pkg-config and the libcrypto linker flag is
> > > > different.
> > > > 
> > > > Signed-off-by: Luca Boccassi <luca.boccassi@microsoft.com>
> > > > ---
> > > > v2: rework the stubbing out to detect mingw in the Makefile and remove
> > > >     sources from compilation, instead of ifdefs.
> > > >     add a new common/win32_defs.h for the compat definitions.
> > > >     define strerror_r using strerror_s.
> > > > 
> > > >     To compile with mingw:
> > > >       make CC=x86_64-w64-mingw32-gcc-8.3-win32
> > > >     note that the openssl headers and a win32 libcrypto.dll need
> > > >     to be available in the default search paths, and otherwise have
> > > >     to be specified as expected via CPPFLAGS/LDFLAGS
> > > > 
> > > 
> > > I got some warnings and an error when compiling:
> > > 
> > > $ make CC=x86_64-w64-mingw32-gcc
> > >   CC       lib/compute_digest.o
> > >   CC       lib/hash_algs.o
> > >   CC       lib/sign_digest.o
> > >   CC       lib/utils.o
> > > lib/utils.c: In function ‘xmalloc’:
> > > lib/utils.c:25:25: warning: unknown conversion type character ‘l’ in format [-Wformat=]
> > >    25 |   libfsverity_error_msg("out of memory (tried to allocate %" SIZET_PF " bytes)",
> > >       |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> > > In file included from lib/../common/win32_defs.h:24,
> > >                  from lib/../common/common_defs.h:18,
> > >                  from lib/lib_private.h:15,
> > >                  from lib/utils.c:14:
> > > /usr/x86_64-w64-mingw32/include/inttypes.h:36:18: note: format string is defined here
> > >    36 | #define PRIu64 "llu"
> > >       |                  ^
> > > lib/utils.c:25:25: warning: too many arguments for format [-Wformat-extra-args]
> > >    25 |   libfsverity_error_msg("out of memory (tried to allocate %" SIZET_PF " bytes)",
> > >       |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> > >   AR       libfsverity.a
> > >   CC       lib/compute_digest.shlib.o
> > >   CC       lib/hash_algs.shlib.o
> > >   CC       lib/sign_digest.shlib.o
> > >   CC       lib/utils.shlib.o
> > > lib/utils.c: In function ‘xmalloc’:
> > > lib/utils.c:25:25: warning: unknown conversion type character ‘l’ in format [-Wformat=]
> > >    25 |   libfsverity_error_msg("out of memory (tried to allocate %" SIZET_PF " bytes)",
> > >       |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> > > In file included from lib/../common/win32_defs.h:24,
> > >                  from lib/../common/common_defs.h:18,
> > >                  from lib/lib_private.h:15,
> > >                  from lib/utils.c:14:
> > > /usr/x86_64-w64-mingw32/include/inttypes.h:36:18: note: format string is defined here
> > >    36 | #define PRIu64 "llu"
> > >       |                  ^
> > > lib/utils.c:25:25: warning: too many arguments for format [-Wformat-extra-args]
> > >    25 |   libfsverity_error_msg("out of memory (tried to allocate %" SIZET_PF " bytes)",
> > >       |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> > >   CCLD     libfsverity.so.0
> > > /usr/lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld: cannot find -l:libcrypto.dll
> > > collect2: error: ld returned 1 exit status
> > > make: *** [Makefile:137: libfsverity.so.0] Error 1
> > > 
> > > 
> > > 
> > > This is on Arch Linux with mingw-w64-gcc and mingw-w64-openssl installed.
> > > 
> > > So there's something wrong with the SIZET_PF format string, and also
> > > -l:libcrypto.dll isn't correct; it should be just -lcrypto like it is on Linux.
> > > (MinGW knows to look for a .dll file.)
> > > 
> > > - Eric
> > 
> > Mmh I don't get any warnings on Debian - gcc-mingw-w64-x86-64 8.3.0-
> > 6+21.3~deb10u1 - any idea how to fix it?
> > 
> > And on -lcrypto, it didn't use to work before the refactor - but now it
> > does. I have no clue what was happening. Will change it back in v3.
> > 
> 
> Apparently the definition of _GNU_SOURCE in lib/utils.c changes the printf
> implementation that is used from Microsoft's to MinGW's, but the use of
> __attribute__((format(printf))) is generating warnings assuming that Microsoft's
> printf implementation is used.  Always defining _GNU_SOURCE and then using
> __attribute__((format(gnu_printf))) might be the way to go:
> 
> diff --git a/Makefile b/Makefile
> index cc62818..44aee92 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -52,7 +52,7 @@ override CFLAGS := -Wall -Wundef				\
>  	$(call cc-option,-Wvla)					\
>  	$(CFLAGS)
>  
> -override CPPFLAGS := -Iinclude -D_FILE_OFFSET_BITS=64 $(CPPFLAGS)
> +override CPPFLAGS := -Iinclude -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $(CPPFLAGS)
>  
>  ifneq ($(V),1)
>  QUIET_CC        = @echo '  CC      ' $@;
> diff --git a/common/win32_defs.h b/common/win32_defs.h
> index e13938a..4edb17f 100644
> --- a/common/win32_defs.h
> +++ b/common/win32_defs.h
> @@ -37,6 +37,11 @@
>  #  define __cold
>  #endif
>  
> +#ifndef __printf
> +#  define __printf(fmt_idx, vargs_idx) \
> +	__attribute__((format(gnu_printf, fmt_idx, vargs_idx)))
> +#endif
> +
>  typedef __signed__ char __s8;
>  typedef unsigned char __u8;
>  typedef __signed__ short __s16;
> diff --git a/lib/utils.c b/lib/utils.c
> index 8bb4413..55a4045 100644
> --- a/lib/utils.c
> +++ b/lib/utils.c
> @@ -9,8 +9,6 @@
>   * https://opensource.org/licenses/MIT.
>   */
>  
> -#define _GNU_SOURCE /* for asprintf() and strerror_r() */
> -
>  #include "lib_private.h"
>  
>  #include <stdio.h>

I get the following warning with the mingw build now:

lib/utils.c: In function ‘xmalloc’:
lib/utils.c:23:25: warning: format ‘%u’ expects argument of type ‘unsigned int’, but argument 2 has type ‘size_t’ {aka ‘long long unsigned int’} [-Wformat=]
   libfsverity_error_msg("out of memory (tried to allocate %" SIZET_PF " bytes)",
                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           size);
           ~~~~           
In file included from lib/../common/win32_defs.h:24,
                 from lib/../common/common_defs.h:18,
                 from lib/lib_private.h:15,
                 from lib/utils.c:12:
/usr/share/mingw-w64/include/inttypes.h:94:20: note: format string is defined here
 #define PRIu64 "I64u"
  AR       libfsverity.a
  CC       lib/sign_digest.shlib.o
  CC       lib/compute_digest.shlib.o
  CC       lib/hash_algs.shlib.o
  CC       lib/utils.shlib.o
lib/utils.c: In function ‘xmalloc’:
lib/utils.c:23:25: warning: format ‘%u’ expects argument of type ‘unsigned int’, but argument 2 has type ‘size_t’ {aka ‘long long unsigned int’} [-Wformat=]
   libfsverity_error_msg("out of memory (tried to allocate %" SIZET_PF " bytes)",
                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           size);
           ~~~~           
In file included from lib/../common/win32_defs.h:24,
                 from lib/../common/common_defs.h:18,
                 from lib/lib_private.h:15,
                 from lib/utils.c:12:
/usr/share/mingw-w64/include/inttypes.h:94:20: note: format string is defined here
 #define PRIu64 "I64u"


But, honestly, it seems harmless to me. If someone on Windows is trying
to get a digest and don't have memory to do it, they'll have bigger
problems to worry about than knowing how much it was requested. I'll
send a v3 with your suggested changes. As far as I can read online,
handling %zu in a cross compatible way is like the number one
annoyance.

-- 
Kind regards,
Luca Boccassi

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

  reply	other threads:[~2020-12-17 19:12 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-17 14:47 [fsverity-utils PATCH v2 1/2] Remove unneeded includes luca.boccassi
2020-12-17 14:47 ` [fsverity-utils PATCH v2 2/2] Allow to build and run sign/digest on Windows luca.boccassi
2020-12-17 18:32   ` Eric Biggers
2020-12-17 18:44     ` Luca Boccassi
2020-12-17 19:05       ` Eric Biggers
2020-12-17 19:12         ` Luca Boccassi [this message]
2020-12-17 19:20           ` Eric Biggers
2020-12-17 19:26             ` Luca Boccassi
2020-12-17 19:16 ` [fsverity-utils PATCH v3 1/2] Remove unneeded includes luca.boccassi
2020-12-17 19:16   ` [fsverity-utils PATCH v3 2/2] Allow to build and run sign/digest on Windows luca.boccassi
2020-12-17 19:25 ` [fsverity-utils PATCH v4 1/2] Remove unneeded includes luca.boccassi
2020-12-17 19:25   ` [fsverity-utils PATCH v4 2/2] Allow to build and run sign/digest on Windows luca.boccassi
2020-12-21 21:40     ` Eric Biggers
2020-12-21 22:23       ` Luca Boccassi
2020-12-21 22:19     ` [PATCH v5] " Luca Boccassi
2020-12-21 23:03       ` Eric Biggers
2020-12-21 23:26         ` Luca Boccassi
2020-12-21 23:24       ` [PATCH v6 1/3] Move -D_GNU_SOURCE to CPPFLAGS Luca Boccassi
2020-12-21 23:24         ` [PATCH v6 2/3] Wrap ./fsverity in TEST_WRAPPER_PROG too Luca Boccassi
2020-12-21 23:24         ` [PATCH v6 3/3] Allow to build and run sign/digest on Windows Luca Boccassi
2020-12-21 23:53           ` Eric Biggers
2020-12-21 23:57             ` Luca Boccassi
2020-12-22  0:03               ` Eric Biggers
2020-12-22  0:11                 ` Luca Boccassi
2020-12-22  0:00         ` [PATCH v6 1/3] Move -D_GNU_SOURCE to CPPFLAGS Eric Biggers
2020-12-22  0:12           ` Luca Boccassi
2020-12-22  0:10         ` [PATCH v7 " Luca Boccassi
2020-12-22  0:10           ` [PATCH v7 2/3] Wrap ./fsverity in TEST_WRAPPER_PROG too Luca Boccassi
2020-12-22 18:41             ` Eric Biggers
2020-12-22  0:10           ` [PATCH v7 3/3] Allow to build and run sign/digest on Windows Luca Boccassi
2020-12-22 18:40             ` Eric Biggers
2020-12-22  8:21           ` [PATCH v7 1/3] Move -D_GNU_SOURCE to CPPFLAGS Eric Biggers
2020-12-22 18:40           ` Eric Biggers
2020-12-21 21:32   ` [fsverity-utils PATCH v4 1/2] Remove unneeded includes Eric Biggers

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=73c70f8bcb6632ab3e161d9b0263bc1563e96b34.camel@gmail.com \
    --to=luca.boccassi@gmail.com \
    --cc=ebiggers@kernel.org \
    --cc=linux-fscrypt@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.