coreboot/src/lib
Patrick Georgi 1d029b40c9 lib/jpeg: Replace decoder with Wuffs' implementation
To quote its repo[0]: Wuffs is a memory-safe programming language (and
a standard library written in that language) for Wrangling Untrusted
File Formats Safely. Wrangling includes parsing, decoding and encoding.

It compiles its library, written in its own language, to a C/C++ source
file that can then be used independently without needing support for
the language. That library is now imported to src/vendorcode/wuffs/.

This change modifies our linters to ignore that directory because
it's supposed to contain the wuffs compiler's result verbatim.

Nigel Tao provided an initial wrapper around wuffs' jpeg decoder
that implements our JPEG API. I further changed it a bit regarding
data placement, dropped stuff from our API that wasn't ever used,
or isn't used anymore, and generally made it fit coreboot a bit
better. Features are Nigel's, bugs are mine.

This commit also adapts our jpeg fuzz test to work with the modified
API. After limiting it to deal only with approximately screen sized
inputs, it fuzzed for 25 hours CPU time without a single hang or
crash. This is a notable improvement over running the test with our
old decoder which crashes within a minute.

Finally, I tried the new parser with a pretty-much-random JPEG file
I got from the internet, and it just showed it (once the resolution
matched), which is also a notable improvement over the old decoder
which is very particular about the subset of JPEG it supports.

In terms of code size, a QEmu build's ramstage increases
from 128060 bytes decompressed (64121 bytes after LZMA)
  to 172304 bytes decompressed (82734 bytes after LZMA).

[0] https://github.com/google/wuffs

Change-Id: If8fa7da69da1ad412f27c2c5e882393c7739bc82
Signed-off-by: Patrick Georgi <patrick@coreboot.org>
Based-on-work-by: Nigel Tao <nigeltao@golang.org>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/78271
Reviewed-by: Paul Menzel <paulepanter@mailbox.org>
Reviewed-by: Martin L Roth <gaumless@gmail.com>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
2023-12-13 16:17:34 +00:00
..
gnat lib/gnat: Remove Compiler_Unit_Warning pragmas 2023-02-26 13:30:35 +00:00
asan.c Allow to build romstage sources inside the bootblock 2023-11-09 13:20:18 +00:00
b64_decode.c treewide: replace GPLv2 long form headers with SPDX header 2020-05-06 22:20:57 +00:00
bmp_logo.c drivers/intel/fsp1_1,fsp2_0: Refactor logo display 2021-02-09 07:52:31 +00:00
boot_device.c treewide: Remove "this file is part of" lines 2020-05-11 17:11:40 +00:00
bootblock.c timestamps: Rename timestamps to make names more consistent 2022-03-08 16:06:33 +00:00
bootmem.c lib: set up specific purpose memory as LB_MEM_SOFT_RESERVED 2023-03-03 11:10:38 +00:00
bootmode.c lib: Perform display init in normal boot mode if BMP_LOGO is set 2023-05-16 13:08:12 +00:00
bootsplash.c lib/jpeg: Replace decoder with Wuffs' implementation 2023-12-13 16:17:34 +00:00
cb.ads lib: Add SPDX identifiers to files missing them 2022-08-11 17:53:29 +00:00
cbfs.c Allow to build romstage sources inside the bootblock 2023-11-09 13:20:18 +00:00
cbfs_master_header.c Makefile.inc: Generate master header and pointer as C structs 2022-05-12 11:11:53 +00:00
cbmem_common.c src: Remove unused 'include <bootstate.h>' 2020-06-02 07:40:35 +00:00
cbmem_console.c lib/cbmem_console.c: Use C99 flexible arrays 2023-07-30 09:59:46 +00:00
cbmem_stage_cache.c treewide: Remove "ERROR: "/"WARN: " prefixes from log messages 2022-02-07 23:29:09 +00:00
compute_ip_checksum.c lib: Add SPDX identifiers to files missing them 2022-08-11 17:53:29 +00:00
coreboot_table.c Center bootsplash on bigger framebuffers 2023-07-17 14:49:04 +00:00
crc_byte.c treewide: Remove "this file is part of" lines 2020-05-11 17:11:40 +00:00
decompressor.c timestamps: Rename timestamps to make names more consistent 2022-03-08 16:06:33 +00:00
delay.c lib: Add SPDX identifiers to files missing them 2022-08-11 17:53:29 +00:00
device_tree.c lib/device_tree.c: Fix print_property 2023-11-16 12:01:40 +00:00
dimm_info_util.c lib/dimm_info_util.c: Add newlines to log messages 2023-06-03 16:12:54 +00:00
dp_aux.c Use the fallthrough statement in switch loops 2022-02-16 21:29:53 +00:00
edid.c Use the fallthrough statement in switch loops 2022-02-16 21:29:53 +00:00
edid_fill_fb.c lib/edid_fill_fb.c: Remove unused <bootsplash.h> 2022-04-24 17:44:24 +00:00
espi_debug.c lib/espi_debug: Add espi_show_slave_peripheral_channel_configuration 2021-04-23 21:20:26 +00:00
ext_stage_cache.c CBMEM: Change declarations for initialization hooks 2022-05-20 07:15:39 +00:00
fallback_boot.c lib: Add SPDX identifiers to files missing them 2022-08-11 17:53:29 +00:00
fit.c Convert literal uses of CONFIG_MAINBOARD_{VENDOR,PART_NUMBER} 2023-05-05 13:56:34 +00:00
fit_payload.c timestamps: Rename timestamps to make names more consistent 2022-03-08 16:06:33 +00:00
fmap.c fmap: Map less space in fallback path without CBFS verification 2023-11-13 14:19:01 +00:00
fw_config.c lib/fw_config: Make fw_config_is_provisioned() always available 2023-06-17 02:40:57 +00:00
gcc.c treewide: Remove "this file is part of" lines 2020-05-11 17:11:40 +00:00
gcov-glue.c tree: Use __func__ instead of hard-coded names 2023-02-17 16:08:04 +00:00
gcov-io.c lib: Add SPDX identifiers to files missing them 2022-08-11 17:53:29 +00:00
gcov-io.h lib/gcov-io.h: Use C99 flexible arrays 2023-08-01 13:34:27 +00:00
gcov-iov.h lib: Add SPDX identifiers to files missing them 2022-08-11 17:53:29 +00:00
gpio.c gpio: Pull down HiZ pins after reading tristate GPIO strapping 2020-08-06 23:54:41 +00:00
halt.c treewide: Remove "this file is part of" lines 2020-05-11 17:11:40 +00:00
hardwaremain.c commonlib/console/post_code.h: Change post code prefix to POSTCODE 2023-06-23 15:06:04 +00:00
hexdump.c lib/hexdump: remove hexdump32 and use hexdump instead 2021-05-27 15:41:15 +00:00
hexstrtobin.c treewide: Convert more license headers to SPDX style 2020-05-11 19:37:19 +00:00
hw-time-timer.adb treewide: Remove "this file is part of" lines 2020-05-11 17:11:40 +00:00
identity.c lib/version: Move board identification strings 2023-04-22 16:20:49 +00:00
imd.c lib: Remove unused <stdlib.h> and use <types.h> when appropriate 2022-04-24 17:43:57 +00:00
imd_cbmem.c cbmem_top_chipset: Change the return value to uintptr_t 2022-11-18 16:00:45 +00:00
jpeg.c lib/jpeg: Replace decoder with Wuffs' implementation 2023-12-13 16:17:34 +00:00
jpeg.h lib/jpeg: Replace decoder with Wuffs' implementation 2023-12-13 16:17:34 +00:00
Kconfig lib: Hook up libhwbase in romstage 2022-12-17 20:51:38 +00:00
Kconfig.cbfs_verification Kconfig.cbfs_verification: Update TOCTOU_SAFETY combination with VBOOT 2023-11-07 22:30:20 +00:00
libgcc.c treewide: Replace CONFIG(ARCH_xx) tests 2020-06-17 21:13:09 +00:00
libgcov.c lib: Add SPDX identifiers to files missing them 2022-08-11 17:53:29 +00:00
list.c lib/list: Add list_append 2021-11-03 08:29:16 +00:00
lzma.c lib: Add SPDX identifiers to files missing them 2022-08-11 17:53:29 +00:00
lzmadecode.c lib/lzma: Build the source for decompression with flag -Ofast 2022-10-12 16:55:58 +00:00
lzmadecode.h
Makefile.inc drivers/net/ne2k: Make it work for bootblock 2023-11-07 17:22:33 +00:00
malloc.c tree: Use __func__ instead of hard-coded names 2023-02-17 16:08:04 +00:00
master_header_pointer.c Kconfig: Add an option to skip adding a cbfs bootblock on x86 2022-05-12 11:12:21 +00:00
memchr.c lib: Add SPDX identifiers to files missing them 2022-08-11 17:53:29 +00:00
memcmp.c lib: Add SPDX identifiers to files missing them 2022-08-11 17:53:29 +00:00
memcpy.c lib: Add SPDX identifiers to files missing them 2022-08-11 17:53:29 +00:00
memmove.c lib: Add SPDX identifiers to files missing them 2022-08-11 17:53:29 +00:00
memrange.c memrange: Honor limit in the last step of top-down stealing 2023-08-26 20:29:37 +00:00
memset.c lib: Add SPDX identifiers to files missing them 2022-08-11 17:53:29 +00:00
metadata_hash.c cbfs/vboot: Adapt to new vb2_digest API 2022-09-02 23:51:29 +00:00
nhlt.c lib/nhlt, soc/intel/skl: Update NHLT to program feedback config 2022-12-21 13:57:48 +00:00
primitive_memtest.c treewide: Remove "this file is part of" lines 2020-05-11 17:11:40 +00:00
prog_loaders.c Allow to build romstage sources inside the bootblock 2023-11-09 13:20:18 +00:00
prog_ops.c lib/prog_ops.c: Add <types.h> 2022-10-06 18:13:19 +00:00
program.ld x86: Add .data section support for pre-memory stages 2023-09-14 21:02:07 +00:00
ramdetect.c drivers/ipmi to lib: Fix misspellings & capitalization issues 2023-12-13 10:42:30 +00:00
ramtest.c commonlib/console/post_code.h: Change post code prefix to POSTCODE 2023-06-23 15:06:04 +00:00
reg_script.c lib/reg_script: Add cast to fix compilation on x86_64 2020-12-01 16:00:57 +00:00
region_file.c src/acpi to src/lib: Fix spelling errors 2021-10-05 18:06:39 +00:00
reset.c treewide: Remove "this file is part of" lines 2020-05-11 17:11:40 +00:00
rmodule.c payloads,src: Replace ALIGN(x, a) by ALIGN_UP(x, a) for clarity 2022-10-13 19:14:57 +00:00
rmodule.ld lib: Add SPDX identifiers to files missing them 2022-08-11 17:53:29 +00:00
romstage_handoff.c ACPI S3: Replace stashed acpi_slp_typ value 2021-01-23 20:19:47 +00:00
rtc.c lib/rtc: Add sanity check for time and date 2021-05-30 20:24:13 +00:00
selfboot.c /: Remove extra space after comma 2022-11-30 03:07:23 +00:00
smbios.c drivers/ipmi to lib: Fix misspellings & capitalization issues 2023-12-13 10:42:30 +00:00
smbios_defaults.c arch/x86,lib: Migrate SMBIOS implementation to common code 2023-06-22 22:24:57 +00:00
spd_bin.c lib: Add LPDDR5x DRAM type 2022-11-07 02:29:23 +00:00
spd_cache.c lib: Check for non-existent DIMMs in check_if_dimm_changed 2022-04-20 06:57:21 +00:00
stack.c
string.c lib: Add SPDX identifiers to files missing them 2022-08-11 17:53:29 +00:00
thread.c timer: Change timer util functions to 64-bit 2022-09-14 11:55:39 +00:00
timer.c treewide: Remove "this file is part of" lines 2020-05-11 17:11:40 +00:00
timer_queue.c lib/timer_queue.c: Fix function signature 2022-09-23 17:34:30 +00:00
timestamp.c CBMEM: Change declarations for initialization hooks 2022-05-20 07:15:39 +00:00
ubsan.c lib/ubsan.c: Restore Jonas' copyright 2023-05-22 12:33:32 +00:00
uuid.c treewide: Remove "this file is part of" lines 2020-05-11 17:11:40 +00:00
ux_locales.c lib: Update locales for non-VBOOT platforms 2023-11-16 05:19:20 +00:00
version.c lib/version: Move board identification strings 2023-04-22 16:20:49 +00:00
wrdd.c treewide: Remove "this file is part of" lines 2020-05-11 17:11:40 +00:00
xxhash.c lib/xxhash.c: Add new hash functions 2022-09-07 22:24:51 +00:00