Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MAC OSX Monterey build failed with gnutls 3.7.3 #34

Closed
pkarashchenko opened this issue Mar 6, 2022 · 4 comments
Closed

MAC OSX Monterey build failed with gnutls 3.7.3 #34

pkarashchenko opened this issue Mar 6, 2022 · 4 comments

Comments

@pkarashchenko
Copy link

Run ../configure --target-list=xtensa-softmmu --enable-debug --enable-sanitizers --disable-strip --disable-capstone --disable-vnc with macOS Monterey.
Crypto config:

  Crypto
    TLS priority                 : "NORMAL"
    GNUTLS support               : YES 3.7.3
      GNUTLS crypto              : YES
    libgcrypt                    : NO
    nettle                       : NO
    crypto afalg                 : NO
    rng-none                     : NO
    Linux keyring                : NO

Run make vga=no -j$(nproc). Make ends with:

Undefined symbols for architecture x86_64:
  "_gcry_mpi_invm", referenced from:
      _esp32_rsa_mod_mul_op in hw_misc_esp32_rsa.c.o
  "_gcry_mpi_mul", referenced from:
      _esp32_rsa_mul_op in hw_misc_esp32_rsa.c.o
  "_gcry_mpi_mulm", referenced from:
      _esp32_rsa_mod_mul_op in hw_misc_esp32_rsa.c.o
  "_gcry_mpi_new", referenced from:
      _esp32_rsa_exp_mod in hw_misc_esp32_rsa.c.o
      _esp32_rsa_mod_mul_op in hw_misc_esp32_rsa.c.o
      _esp32_rsa_mul_op in hw_misc_esp32_rsa.c.o
  "_gcry_mpi_powm", referenced from:
      _esp32_rsa_exp_mod in hw_misc_esp32_rsa.c.o
  "_gcry_mpi_print", referenced from:
      _mpi_gcrypt_to_block in hw_misc_esp32_rsa.c.o
  "_gcry_mpi_release", referenced from:
      _esp32_rsa_exp_mod in hw_misc_esp32_rsa.c.o
      _esp32_rsa_mod_mul_op in hw_misc_esp32_rsa.c.o
      _esp32_rsa_mul_op in hw_misc_esp32_rsa.c.o
  "_gcry_mpi_scan", referenced from:
      _mpi_block_to_gcrypt in hw_misc_esp32_rsa.c.o
  "_gcry_mpi_set_bit", referenced from:
      _esp32_rsa_mod_mul_op in hw_misc_esp32_rsa.c.o
  "_gcry_strerror", referenced from:
      _mpi_block_to_gcrypt in hw_misc_esp32_rsa.c.o
      _mpi_gcrypt_to_block in hw_misc_esp32_rsa.c.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
ninja: build stopped: subcommand failed.
make: *** [run-ninja] Error 1

Currently compiled with workaround: ../configure --target-list=xtensa-softmmu --enable-debug --enable-sanitizers --disable-strip --disable-capstone --disable-vnc --enable-gcrypt.

@igrr
Copy link
Member

igrr commented Mar 17, 2022

--enable-gcrypt flag is now mentioned in the wiki: https://github.com/espressif/qemu/wiki#configure

I'm not sure what should be the behavior if libgcrypt isn't available. We could disable emulation of the cryptographic peripherals or we could fail earlier with a clear error message that libgcrypt is required when compiling with ESP32 support.

@pkarashchenko
Copy link
Author

The case is that currently build system selects one of GNU TLS, nettle or libcrypt. I think the solution can be to migrate to some lib agnostic APIs or make a selection of crypto APIs that are called based on crypto library selected. What do you think?

@igrr
Copy link
Member

igrr commented Mar 17, 2022

QEMU does provide some library-agnostic crypto APIs which can work with either of those libraries (see include/crypto directory). However for emulation of ESP crypto peripherals these functions aren't sufficient, so we decided to use libgcrypt directly.

It's possible to propose some additional library-agnostic crypto APIs but then we would have to:

  • implement these APIs for all 3 libraries
  • make sure emulation works correctly with all 3 libraries
  • maintain a much larger patch set (ESP peripherals + changes to library-agnostic crypto part)

That's quite a lot of extra work which we aren't likely to do near term.

@pkarashchenko
Copy link
Author

Ok. It is fine that --enable-gcrypt flag is now mentioned in the wiki. Let's close the issue.

@igrr igrr closed this as completed Mar 17, 2022
igrr pushed a commit that referenced this issue Aug 2, 2022
Include the qtest reproducer provided by Alexander Bulekov
in https://gitlab.com/qemu-project/qemu/-/issues/542.
Without the previous commit, we get:

  $ make check-qtest-i386
  ...
  Running test tests/qtest/intel-hda-test
  AddressSanitizer:DEADLYSIGNAL
  =================================================================
  ==1580408==ERROR: AddressSanitizer: stack-overflow on address 0x7ffc3d566fe0
      #0 0x63d297cf in address_space_translate_internal softmmu/physmem.c:356
      #1 0x63d27260 in flatview_do_translate softmmu/physmem.c:499:15
      #2 0x63d27af5 in flatview_translate softmmu/physmem.c:565:15
      #3 0x63d4ce84 in flatview_write softmmu/physmem.c:2850:10
      #4 0x63d4cb18 in address_space_write softmmu/physmem.c:2950:18
      #5 0x63d4d387 in address_space_rw softmmu/physmem.c:2960:16
      #6 0x62ae12f2 in dma_memory_rw_relaxed include/sysemu/dma.h:89:12
      #7 0x62ae104a in dma_memory_rw include/sysemu/dma.h:132:12
      #8 0x62ae6157 in dma_memory_write include/sysemu/dma.h:173:12
      #9 0x62ae5ec0 in stl_le_dma include/sysemu/dma.h:275:1
      #10 0x62ae5ba2 in stl_le_pci_dma include/hw/pci/pci.h:871:1
      #11 0x62ad59a6 in intel_hda_response hw/audio/intel-hda.c:372:12
      #12 0x62ad2afb in hda_codec_response hw/audio/intel-hda.c:107:5
      #13 0x62aec4e1 in hda_audio_command hw/audio/hda-codec.c:655:5
      #14 0x62ae05d9 in intel_hda_send_command hw/audio/intel-hda.c:307:5
      #15 0x62adff54 in intel_hda_corb_run hw/audio/intel-hda.c:342:9
      #16 0x62adc13b in intel_hda_set_corb_wp hw/audio/intel-hda.c:548:5
      #17 0x62ae5942 in intel_hda_reg_write hw/audio/intel-hda.c:977:9
      #18 0x62ada10a in intel_hda_mmio_write hw/audio/intel-hda.c:1054:5
      #19 0x63d8f383 in memory_region_write_accessor softmmu/memory.c:492:5
      #20 0x63d8ecc1 in access_with_adjusted_size softmmu/memory.c:554:18
      #21 0x63d8d5d6 in memory_region_dispatch_write softmmu/memory.c:1504:16
      #22 0x63d5e85e in flatview_write_continue softmmu/physmem.c:2812:23
      #23 0x63d4d05b in flatview_write softmmu/physmem.c:2854:12
      #24 0x63d4cb18 in address_space_write softmmu/physmem.c:2950:18
      #25 0x63d4d387 in address_space_rw softmmu/physmem.c:2960:16
      #26 0x62ae12f2 in dma_memory_rw_relaxed include/sysemu/dma.h:89:12
      #27 0x62ae104a in dma_memory_rw include/sysemu/dma.h:132:12
      #28 0x62ae6157 in dma_memory_write include/sysemu/dma.h:173:12
      #29 0x62ae5ec0 in stl_le_dma include/sysemu/dma.h:275:1
      #30 0x62ae5ba2 in stl_le_pci_dma include/hw/pci/pci.h:871:1
      #31 0x62ad59a6 in intel_hda_response hw/audio/intel-hda.c:372:12
      #32 0x62ad2afb in hda_codec_response hw/audio/intel-hda.c:107:5
      #33 0x62aec4e1 in hda_audio_command hw/audio/hda-codec.c:655:5
      #34 0x62ae05d9 in intel_hda_send_command hw/audio/intel-hda.c:307:5
      #35 0x62adff54 in intel_hda_corb_run hw/audio/intel-hda.c:342:9
      #36 0x62adc13b in intel_hda_set_corb_wp hw/audio/intel-hda.c:548:5
      #37 0x62ae5942 in intel_hda_reg_write hw/audio/intel-hda.c:977:9
      #38 0x62ada10a in intel_hda_mmio_write hw/audio/intel-hda.c:1054:5
      #39 0x63d8f383 in memory_region_write_accessor softmmu/memory.c:492:5
      #40 0x63d8ecc1 in access_with_adjusted_size softmmu/memory.c:554:18
      #41 0x63d8d5d6 in memory_region_dispatch_write softmmu/memory.c:1504:16
      #42 0x63d5e85e in flatview_write_continue softmmu/physmem.c:2812:23
      #43 0x63d4d05b in flatview_write softmmu/physmem.c:2854:12
      #44 0x63d4cb18 in address_space_write softmmu/physmem.c:2950:18
      #45 0x63d4d387 in address_space_rw softmmu/physmem.c:2960:16
      #46 0x62ae12f2 in dma_memory_rw_relaxed include/sysemu/dma.h:89:12
      qemu#47 0x62ae104a in dma_memory_rw include/sysemu/dma.h:132:12
      #48 0x62ae6157 in dma_memory_write include/sysemu/dma.h:173:12
      ...
  SUMMARY: AddressSanitizer: stack-overflow softmmu/physmem.c:356 in address_space_translate_internal
  ==1580408==ABORTING
  Broken pipe
  Aborted (core dumped)

Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Acked-by: Thomas Huth <thuth@redhat.com>
Message-Id: <20211218160912.1591633-4-philmd@redhat.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants