Compare commits

...

120 Commits

Author SHA1 Message Date
Richard Purdie
bba3233897 build-appliance-image: Update to dunfell head revision
(From OE-Core rev: f3be01483b01c88f8c4ba24ca73ccf1bcc33665c)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2022-01-27 16:16:11 +00:00
Steve Sakoman
d752cbcbbe poky.conf: Bump version for 3.1.14 release
(From meta-yocto rev: 8124e73de7fd319d96cdb6f556d6b1943fbe41e3)

Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2022-01-27 16:16:04 +00:00
Jate Sujjavanich
2bfe7e096d bitbake: hashserv: specify loop for asyncio in python < 3.6
[YOCTO #14697]

Detect python version 3.5 restoring loop argument where
it is still required. In 3.6 auto loop detection is available.

Bitbake 1.46 is used in dunfell which lists a minimum python version
of 3.5. Omitting this argument leads to a regression and hang during
"Initialising tasks" at 44%.

(Bitbake rev: be6ecc160ac4a8d9715257b9b955363cecc081ea)

Signed-off-by: Jate Sujjavanich <jatedev@gmail.com>
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2022-01-25 12:23:15 +00:00
Marek Vasut
e256885889 Revert "weston: Use systemd notify,"
Commit 4efdcc1090 ("weston: Use systemd notify,") has non-trivial to
backport dependencies without which it cannot work, revert backport.

In oe-core dunfell, weston is still started using /usr/bin/weston-start
script in meta/recipes-graphics/wayland/weston-init/weston@.service .
Since 76ed534267 ("weston-init: Use weston-launch when starting weston
as the first windowing system"), the weston-start script starts weston
using weston-launch executable in case $DISPLAY is not set, i.e. when
weston is started as the primary compositor.

When weston is started via weston-launch, the notification to systemd
is not delivered, and weston service fails to start with the following:
"
weston@root.service: start operation timed out. Terminating.
"

The weston systemd service has been reworked considerably since oe-core
dunfell in commit c21fa5a291 ("weston-init: Redefine weston service and
add socket activation option"), which replaced the use of weston-start
in weston@.service with plain weston, and has been further improved in
commit dd83fb40f7 ("weston-init: Stop running weston as root") . The
commit reverted here, oe-core/master commit c8aa0222ce ("weston: wrapper
for weston modules argument"), landed only with the two aforementioned
reworks already in place, therefore the commit could have never been
tested with weston started via weston-launch executable and the timeout
at delivering systemd notification could not have happened in master.

Both c21fa5a291 ("weston-init: Redefine weston service and add socket
activation option") and dd83fb40f7 ("weston-init: Stop running weston
as root") are large feature patches and thus unsuitable for stable
backports, hence this revert seems to be the least problematic way.

(From OE-Core rev: dabd41819563ec63fc5bd5fd0f4af64230e58130)

Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Alexandre Belloni <alexandre.belloni@bootlin.com>
Cc: Joshua Watt <JPEWhacker@gmail.com>
Cc: Pavel Zhukov <pavel.zhukov@huawei.com>
Cc: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2022-01-25 12:06:55 +00:00
Richard Purdie
c72a9d0a6d lttng-tools: Add missing DEPENDS on bison-native
This was being provided by other pieces of the dependency chain but is
specifically required by configure and could fail if those pieces come
from sstate. Fix such builds by adding the missing dependency.

(From OE-Core rev: 32dd9e93c8a49c07d28c8bf240145c9e48864de7)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit ba2587beb2a3fb0ef9139f846e161542d2c5c4ae)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2022-01-25 12:06:55 +00:00
Bruce Ashfield
744c593c3d kernel: introduce python3-dtschema-wrapper
The 5.16 kernel introduced mandatory schema checking on any dtb file
built through the kernel.

That funcionality is provided via python3-dt-schema.

The dependencies to enable that functionality is not small, and may
not always be desired (in particular on architectures that do not
support dtbs, or in development cycles). It may also be useful for
allowing a non-conformant dts to be compiled.

This commit introduces a set of wrapper scripts that when added
as a depenency to the kernel, can pass both the validation testing
and validation steps of a dts.

(From OE-Core rev: 010477bc44a90b1f0dea82fbb824c9c9038edc80)

Signed-off-by: Bruce Ashfield <bruce.ashfield@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>

Backported from oe-core commit 2566563ad4.
Signed-off-by: Paul Barker <paul.barker@sancloud.com>
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2022-01-25 12:06:55 +00:00
Bruce Ashfield
243f90cb86 linux-yocto/5.4: update to v5.4.172
Updating linux-yocto/5.4 to the latest korg -stable release that comprises
the following commits:

    b7f70762d158 Linux 5.4.172
    f415409551b0 staging: greybus: fix stack size warning with UBSAN
    65c2e7176f77 drm/i915: Avoid bitwise vs logical OR warning in snb_wm_latency_quirk()
    86ded7a6cf40 staging: wlan-ng: Avoid bitwise vs logical OR warning in hfa384x_usb_throttlefn()
    a459686f986c media: Revert "media: uvcvideo: Set unique vdev name based in type"
    7e07bedae159 random: fix crash on multiple early calls to add_bootloader_randomness()
    517ab153f503 random: fix data race on crng init time
    90ceecdaa062 random: fix data race on crng_node_pool
    a4fa4377c91b can: gs_usb: gs_can_start_xmit(): zero-initialize hf->{flags,reserved}
    e90a7524b5c8 can: gs_usb: fix use of uninitialized variable, detach device on reception of invalid USB data
    9e9241d3345a drivers core: Use sysfs_emit and sysfs_emit_at for show(device *...) functions
    ada3805f1423 mfd: intel-lpss: Fix too early PM enablement in the ACPI ->probe()
    d08a0a88db88 veth: Do not record rx queue hint in veth_xmit
    a6722b497401 mmc: sdhci-pci: Add PCI ID for Intel ADL
    1199f0928488 USB: Fix "slab-out-of-bounds Write" bug in usb_hcd_poll_rh_status
    43aac50196f3 USB: core: Fix bug in resuming hub's handling of wakeup requests
    ed5c2683b67b Bluetooth: bfusb: fix division by zero in send path
    784e873af3dc Bluetooth: btusb: fix memory leak in btusb_mtk_submit_wmt_recv_urb()
    ad07b60837b2 workqueue: Fix unbind_workers() VS wq_worker_running() race

(From OE-Core rev: 78d418fca20f997141d06d9c53194ec4e675860d)

Signed-off-by: Bruce Ashfield <bruce.ashfield@gmail.com>
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2022-01-25 12:06:55 +00:00
Bruce Ashfield
ab23ceac12 linux-yocto/5.4: update to v5.4.171
Updating linux-yocto/5.4 to the latest korg -stable release that comprises
the following commits:

    0a4ce4977bbe Linux 5.4.171
    0101f118529d mISDN: change function names to avoid conflicts
    34821931e18e atlantic: Fix buff_ring OOB in aq_ring_rx_clean
    44065cc11797 net: udp: fix alignment problem in udp4_seq_show()
    0ad45baead37 ip6_vti: initialize __ip6_tnl_parm struct in vti6_siocdevprivate
    8b36aa5af4da scsi: libiscsi: Fix UAF in iscsi_conn_get_param()/iscsi_conn_teardown()
    6a3ffcc9ffd0 usb: mtu3: fix interval value for intr and isoc
    f0e57098243c ipv6: Do cleanup if attribute validation fails in multipath route
    c94999cfbbbe ipv6: Continue processing multipath route even if gateway attribute is invalid
    2a6a811a45fd phonet: refcount leak in pep_sock_accep
    db0c834abbc1 rndis_host: support Hytera digital radios
    72eb522ae6f1 power: reset: ltc2952: Fix use of floating point literals
    159eaafee69b power: supply: core: Break capacity loop
    102af6edfd3a xfs: map unwritten blocks in XFS_IOC_{ALLOC,FREE}SP just like fallocate
    10f2c336929d net: phy: micrel: set soft_reset callback to genphy_soft_reset for KSZ8081
    c0db2e1e60c6 sch_qfq: prevent shift-out-of-bounds in qfq_init_qdisc
    bcbfc7780047 batman-adv: mcast: don't send link-local multicast to mcast routers
    76936ddb4913 lwtunnel: Validate RTA_ENCAP_TYPE attribute length
    2ebd777513d9 ipv6: Check attribute length for RTA_GATEWAY when deleting multipath route
    a02d2be7eb48 ipv6: Check attribute length for RTA_GATEWAY in multipath route
    34224e936a9d ipv4: Check attribute length for RTA_FLOW in multipath route
    125d91f07233 ipv4: Check attribute length for RTA_GATEWAY in multipath route
    1f46721836ee i40e: Fix incorrect netdev's real number of RX/TX queues
    f98acd3b4dcf i40e: Fix for displaying message regarding NVM version
    c340d45148c4 i40e: fix use-after-free in i40e_sync_filters_subtask()
    38fbb1561d66 mac80211: initialize variable have_higher_than_11mbit
    7646a340b25b RDMA/uverbs: Check for null return of kmalloc_array
    5eb5d9c6591d RDMA/core: Don't infoleak GRH fields
    415fc3f59595 iavf: Fix limit of total number of queues to active queues of VF
    23ebe9cfda5e ieee802154: atusb: fix uninit value in atusb_set_extended_addr
    aa171d748a36 tracing: Tag trace_percpu_buffer as a percpu pointer
    db50ad6eec87 tracing: Fix check for trace_percpu_buffer validity in get_trace_buf()
    cbbed1338d76 selftests: x86: fix [-Wstringop-overread] warn in test_process_vm_readv()
    6904679c8400 Input: touchscreen - Fix backport of a02dcde595f7cbd240ccd64de96034ad91cffc40
    6e80d2ee44c6 f2fs: quota: fix potential deadlock

(From OE-Core rev: 69453657a67e356f31e998ca539d24d2ad86ddb9)

Signed-off-by: Bruce Ashfield <bruce.ashfield@gmail.com>
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2022-01-25 12:06:55 +00:00
Bruce Ashfield
dadebc61f4 linux-yocto/5.4: update to v5.4.170
Updating linux-yocto/5.4 to the latest korg -stable release that comprises
the following commits:

047dedaa38ce Linux 5.4.170
2c3920c58e03 perf script: Fix CPU filtering of a script's switch events
fe5838c22b98 net: fix use-after-free in tw_timer_handler
46556c4ecd63 Input: spaceball - fix parsing of movement data packets
975774ea7528 Input: appletouch - initialize work before device registration
436f6d0005d6 scsi: vmw_pvscsi: Set residual data length conditionally
103b16a8c51f binder: fix async_free_space accounting for empty parcels
98cde4dd5ec8 usb: mtu3: set interval of FS intr and isoc endpoint
585e2b244dda usb: mtu3: fix list_head check warning
50434eb6098f usb: mtu3: add memory barrier before set GPD's HWO
240fc586e83d usb: gadget: f_fs: Clear ffs_eventfd in ffs_data_clear.
20d80640fa61 xhci: Fresco FL1100 controller should not have BROKEN_MSI quirk set.
b364fcef9615 uapi: fix linux/nfc.h userspace compilation errors
245c5e43cd25 nfc: uapi: use kernel size_t to fix user-space builds
9e4a3f47eff4 i2c: validate user data in compat ioctl
a7d3a1c6d9d9 fsl/fman: Fix missing put_device() call in fman_port_probe
2dc95e936414 net/ncsi: check for error return from call to nla_put_u32
ef01d63140f5 selftests/net: udpgso_bench_tx: fix dst ip argument
20f6896787c5 net/mlx5e: Fix wrong features assignment in case of error
b85f87d30dba ionic: Initialize the 'lif->dbid_inuse' bitmap
1cd4063dbc91 NFC: st21nfca: Fix memory leak in device probe and remove
44cd64aa1c43 net: lantiq_xrx200: fix statistics of received bytes
3477f4b67ee4 net: usb: pegasus: Do not drop long Ethernet frames
831de271452b sctp: use call_rcu to free endpoint
3218d6bd6195 selftests: Calculate udpgso segment count without header adjustment
0a2e9f6a8f33 udp: using datalen to cap ipv6 udp max gso segments
db484d35a948 net/mlx5: DR, Fix NULL vs IS_ERR checking in dr_domain_init_resources
cc926b8f4d39 scsi: lpfc: Terminate string in lpfc_debugfs_nvmeio_trc_write()
44937652afdb selinux: initialize proto variable in selinux_ip_postroute_compat()
b536e357e73c recordmcount.pl: fix typo in s390 mcount regex
8d86b486e0de memblock: fix memblock_phys_alloc() section mismatch error
4606bfdaeb16 platform/x86: apple-gmux: use resource_size() with res
930d4986a432 tomoyo: Check exceeded quota early in tomoyo_domain_quota_is_ok().
7978ddae240b Input: i8042 - enable deferred probe quirk for ASUS UM325UA
f93d5dca7d84 Input: i8042 - add deferred probe support
940e68e57ab6 tee: handle lookup of shm with reference count 0
4b38b12092b4 HID: asus: Add depends on USB_HID to HID_ASUS Kconfig option

(From OE-Core rev: 411adf3dbe122b42acc7810bc3034874fc36f473)

Signed-off-by: Bruce Ashfield <bruce.ashfield@gmail.com>
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2022-01-25 12:06:55 +00:00
Bruce Ashfield
f439e82404 linux-yocto/5.4: update to v5.4.169
Updating linux-yocto/5.4 to the latest korg -stable release that comprises
the following commits:

4ca2eaf1d477 Linux 5.4.169
48c76fc53582 phonet/pep: refuse to enable an unbound pipe
a5c6a13e9056 hamradio: improve the incomplete fix to avoid NPD
ef5f7bfa19e3 hamradio: defer ax25 kfree after unregister_netdev
df8f79bcc2e4 ax25: NPD bug when detaching AX25 device
0333eaf38500 hwmon: (lm90) Do not report 'busy' status bit as alarm
bf260ff4a42f hwmom: (lm90) Fix citical alarm status for MAX6680/MAX6681
f373298e1bf0 pinctrl: mediatek: fix global-out-of-bounds issue
bf04afb6137f mm: mempolicy: fix THP allocations escaping mempolicy restrictions
f5db6bc93494 KVM: VMX: Fix stale docs for kvm-intel.emulate_invalid_guest_state
06c13e039d92 usb: gadget: u_ether: fix race in setting MAC address in setup phase
b0406b5ef4e2 f2fs: fix to do sanity check on last xattr entry in __f2fs_setxattr()
806142c805ca tee: optee: Fix incorrect page free bug
5478b90270a3 ARM: 9169/1: entry: fix Thumb2 bug in iWMMXt exception handling
1c3d4122bec6 mmc: core: Disable card detect during shutdown
e9db8fc6c7af mmc: sdhci-tegra: Fix switch to HS400ES mode
d9031ce0b071 pinctrl: stm32: consider the GPIO offset to expose all the GPIO lines
c7b2e5850ba6 x86/pkey: Fix undefined behaviour with PKRU_WD_BIT
ddc1d49e10a7 parisc: Correct completer in lws start
8467c8cb94a4 ipmi: fix initialization when workqueue allocation fails
8efd6a3391f7 ipmi: ssif: initialize ssif_info->client early
cd24bafefc17 ipmi: bail out if init_srcu_struct fails
5525d80dc9dd Input: atmel_mxt_ts - fix double free in mxt_read_info_block
737a98d91b07 ALSA: hda/realtek: Amp init fixup for HP ZBook 15 G6
8df036befbc3 ALSA: drivers: opl3: Fix incorrect use of vp->state
fdaf41977d77 ALSA: jack: Check the return value of kstrdup()
44c743f63dd3 hwmon: (lm90) Drop critical attribute support for MAX6654
4615c9740575 hwmon: (lm90) Introduce flag indicating extended temperature support
c2242478f28d hwmon: (lm90) Add basic support for TI TMP461
d939660eff62 hwmon: (lm90) Add max6654 support to lm90 driver
055ca98d48ba hwmon: (lm90) Fix usage of CONFIG2 register in detect function
a7f95328c6f0 Input: elantech - fix stack out of bound access in elantech_change_report_id()
e12dcd4aa7f4 sfc: falcon: Check null pointer of rx_queue->page_ring
c11a41e26985 drivers: net: smc911x: Check for error irq
5d556b1437e1 fjes: Check for error irq
d7024080db82 bonding: fix ad_actor_system option setting to default
992649b8b168 ipmi: Fix UAF when uninstall ipmi_si and ipmi_msghandler module
2460d96c19a8 net: skip virtio_net_hdr_set_proto if protocol already set
621d5536b452 net: accept UFOv6 packages in virtio_net_hdr_to_skb
0b01c51c4f47 qlcnic: potential dereference null pointer of rx_queue->page_ring
685fc8d22489 netfilter: fix regression in looped (broad|multi)cast's MAC handling
79dcbd817615 IB/qib: Fix memory leak in qib_user_sdma_queue_pkts()
78874bca4f27 spi: change clk_disable_unprepare to clk_unprepare
0c0ac2547c87 arm64: dts: allwinner: orangepi-zero-plus: fix PHY mode
6fa4e2992717 HID: holtek: fix mouse probing
2712816c10b3 serial: 8250_fintek: Fix garbled text for console
51c925a9bccc net: usb: lan78xx: add Allied Telesis AT29M2-AF
8f843cf57202 Linux 5.4.168
0d99b3c6bd39 xen/netback: don't queue unlimited number of packages
8bfcd0385211 xen/netback: fix rx queue stall detection
560e64413b4a xen/console: harden hvc_xen against event channel storms
3e68d099f09c xen/netfront: harden netfront against event channel storms
4ed9f5c511ce xen/blkfront: harden blkfront against event channel storms
192fe5739571 Revert "xsk: Do not sleep in poll() when need_wakeup set"
e281b7199236 net: sched: Fix suspicious RCU usage while accessing tcf_tunnel_info
96a1550a2b43 mac80211: fix regression in SSN handling of addba tx
66aba15a144a rcu: Mark accesses to rcu_state.n_force_qs
b847ecff8507 scsi: scsi_debug: Sanity check block descriptor length in resp_mode_select()
f9f300a92297 ovl: fix warning in ovl_create_real()
ba2a9d8f8ef1 fuse: annotate lock in fuse_reverse_inval_entry()
96f182c9f48b media: mxl111sf: change mutex_init() location
095ad3969b62 xsk: Do not sleep in poll() when need_wakeup set
29e9fdf7b681 ARM: dts: imx6ull-pinfunc: Fix CSI_DATA07__ESAI_TX0 pad name
f6e9e7be9b80 Input: touchscreen - avoid bitwise vs logical OR warning
3d45573dfb6e mwifiex: Remove unnecessary braces from HostCmd_SET_SEQ_NO_BSS_INFO
a19cf6844b50 mac80211: validate extended element ID is present
e070c0c990d7 drm/amdgpu: correct register access for RLC_JUMP_TABLE_RESTORE
c9ee8144e409 libata: if T_LENGTH is zero, dma direction should be DMA_NONE
62889094939c timekeeping: Really make sure wall_to_monotonic isn't positive
241d36219aaa USB: serial: option: add Telit FN990 compositions
d2bb4378e2bb USB: serial: cp210x: fix CP2105 GPIO registration
bae7f0808202 usb: xhci: Extend support for runtime power management for AMD's Yellow carp.
3dc6b5f2a4d5 PCI/MSI: Mask MSI-X vectors only on success
c520e7cf82ac PCI/MSI: Clear PCI_MSIX_FLAGS_MASKALL on error
ed31692a9758 USB: NO_LPM quirk Lenovo USB-C to Ethernet Adapher(RTL8153-04)
aae3448b78d9 USB: gadget: bRequestType is a bitfield, not a enum
ad0ed314d616 sit: do not call ipip6_dev_free() from sit_init_net()
c675256a7f13 net: systemport: Add global locking for descriptor lifecycle
2bf888fa4a5c net/smc: Prevent smc_release() from long blocking
56a6ffea18c2 net: Fix double 0x prefix print in SKB dump
027a13973dad net/packet: rx_owner_map depends on pg_vec
699e794c12a3 netdevsim: Zero-initialize memory for new map's value in function nsim_bpf_map_alloc
a97e7dd4b713 ixgbe: set X550 MDIO speed before talking to PHY
8addba6cab94 igbvf: fix double free in `igbvf_probe`
36844e250a2e igb: Fix removal of unicast MAC filters of VFs
bca4a53ea72c soc/tegra: fuse: Fix bitwise vs. logical OR warning
166f0adf7e75 rds: memory leak in __rds_conn_create()
9cb405ee5334 flow_offload: return EOPNOTSUPP for the unsupported mpls action type
066a637d1ce7 net: sched: lock action when translating it to flow_action infra
e7660f9535ad mac80211: fix lookup when adding AddBA extension element
f363af7c7045 mac80211: accept aggregation sessions on 6 GHz
1e6526148149 mac80211: agg-tx: don't schedule_and_wake_txq() under sta->lock
ceb30f48d817 mac80211: agg-tx: refactor sending addba
eeaf9c0609e0 selftest/net/forwarding: declare NETIFS p9 p10
2252220d9ebb dmaengine: st_fdma: fix MODULE_ALIAS
18203fe17643 selftests: Fix IPv6 address bind tests
b46f0afa74e7 selftests: Fix raw socket bind tests with VRF
7b5596e53125 inet_diag: fix kernel-infoleak for UDP sockets
2c589cf07bd5 inet_diag: use jiffies_delta_to_msecs()
0d80462fbdca sch_cake: do not call cake_destroy() from cake_init()
2fba53ccfb1b s390/kexec_file: fix error handling when applying relocations
b380bf012d2b selftests: net: Correct ping6 expected rc from 2 to 1
ec5c00be7836 clk: Don't parent clks until the parent is fully registered
f83ed203c822 ARM: socfpga: dts: fix qspi node compatible
46b9e29db201 mac80211: track only QoS data frames for admission control
a6f18191c6c1 arm64: dts: rockchip: fix audio-supply for Rock Pi 4
86f2789e3c15 arm64: dts: rockchip: fix rk3399-leez-p710 vcc3v3-lan supply
4bb01424330d arm64: dts: rockchip: remove mmc-hs400-enhanced-strobe from rk3399-khadas-edge
e0759696de68 nfsd: fix use-after-free due to delegation race
7243aa71509a iio: adc: stm32: fix a current leak by resetting pcsel before disabling vdda
0d3277eabd54 audit: improve robustness of the audit queue handling
501ecd90efdc dm btree remove: fix use after free in rebalance_children()
b25e213522f6 recordmcount.pl: look for jgnop instruction as well as bcrl on s390
c0954f1010ad virtio_ring: Fix querying of maximum DMA mapping size for virtio device
802a1a850156 firmware: arm_scpi: Fix string overflow in SCPI genpd driver
33f0dfab3187 mac80211: send ADDBA requests using the tid/queue of the aggregation session
873e664a83ef mac80211: mark TX-during-stop for TX in in_reconfig
ff3e3fdc737a KVM: selftests: Make sure kvm_create_max_vcpus test won't hit RLIMIT_NOFILE

(From OE-Core rev: 6d0630b930113c9d778874b2d77a567275085218)

Signed-off-by: Bruce Ashfield <bruce.ashfield@gmail.com>
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2022-01-25 12:06:55 +00:00
Kai Kang
ce2db1116c speex: fix CVE-2020-23903
Backport patch to fix CVE-2020-23903.

CVE: CVE-2020-23903

(From OE-Core rev: 6afe9d7d0381b593c0b1e434c48008c7fa62750c)

Signed-off-by: Kai Kang <kai.kang@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit b8f56e5e9eef32c1e01742f913e205d93548de1f)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2022-01-25 12:06:55 +00:00
Steve Sakoman
8c58e222ea expat: fix CVE-2021-46143
In doProlog in xmlparse.c in Expat (aka libexpat) before 2.4.3, an
integer overflow exists for m_groupSize.

Backport patch from:
85ae9a2d7d

CVE: CVE-2021-46143
(From OE-Core rev: 41a65d27e4ecdc11977e2944d8af2f51c48f32ec)

Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2022-01-25 12:06:55 +00:00
Steve Sakoman
b618e57f79 expat: fix CVE-2021-45960
In Expat (aka libexpat) before 2.4.3, a left shift by 29 (or more)
places in the storeAtts function in xmlparse.c can lead to realloc
misbehavior (e.g., allocating too few bytes, or only freeing memory).

Backport patch from:
0adcb34c49

CVE: CVE-2021-45960
(From OE-Core rev: 22fe1dea3164a5cd4d5636376f3671641ada1da9)

Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2022-01-25 12:06:55 +00:00
Steve Sakoman
95491a12ea expat fix CVE-2022-22822 through CVE-2022-22827
xmlparse.c has multiple integer overflows. The involved functions are:

- addBinding (CVE-2022-22822)
- build_model (CVE-2022-22823)
- defineAttribute (CVE-2022-22824)
- lookup (CVE-2022-22825)
- nextScaffoldPart (CVE-2022-22826)
- storeAtts (CVE-2022-22827)

Backport patch from:
9f93e8036e

CVE: CVE-2022-22822 CVE-2022-22823 CVE-2022-22824 CVE-2022-22825 CVE-2022-22826 CVE-2022-22827
(From OE-Core rev: 3b6c47c0ebae9fdb7a13480daf8f46a8dbb2c9bd)

Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2022-01-25 12:06:55 +00:00
Akash Hadke
6348d2d8a0 glibc: Add fix for data races in pthread_create and TLS access
Inconsistency detected by ld.so: dl-tls.c: 493: _dl_allocate_tls_init: Assertion `listp->slotinfo[cnt].gen <= _rtld_local._dl_tls_generation' failed!
caused by dlopen (in _dl_add_to_slotinfo and in dl_open_worker) doing
  listp->slotinfo[idx].gen = GL(dl_tls_generation) + 1;
  //...
  if (any_tls && __builtin_expect (++GL(dl_tls_generation) == 0, 0))
while pthread_create (in _dl_allocate_tls_init) concurrently doing
  assert (listp->slotinfo[cnt].gen <= GL(dl_tls_generation));

Backported below patch that can fix the following bugs with a lock
that prevents DTV setup running concurrently with dlopen or dlclose.

Bug 19329: https://sourceware.org/bugzilla/show_bug.cgi?id=19329
Bug 27111: https://sourceware.org/bugzilla/show_bug.cgi?id=27111

Patch: 0031-elf-Fix-data-races-in-pthread_create-and-TLS-access-BZ-19329.patch
Link: https://sourceware.org/git/?p=glibc.git;a=patch;h=1387ad6225c2222f027790e3f460e31aa5dd2c54

It requires a supporting patch
0030-elf-Refactor_dl_update-slotinfo-to-avoid-use-after-free.patch
Link: https://sourceware.org/git/?p=glibc.git;a=patch;h=c0669ae1a629e16b536bf11cdd0865e0dbcf4bee

After adding the above fix there is a number of racy read accesses
to globals that will be changed to relaxed MO atomics in follow-up
patch given below.

This fixes the regressions and avoids cluttering the main part
of the fix.

0032-elf-Use-relaxed-atomics-for-racy-accesses-BZ-19329.patch
Link: https://sourceware.org/git/?p=glibc.git;a=patch;h=f4f8f4d4e0f92488431b268c8cd9555730b9afe9

Backported the below patch to add the test to check the added fix.
0033-elf-Add-test-case-for-BZ-19329.patch
Link: https://sourceware.org/git/?p=glibc.git;a=patch;h=9d0e30329c23b5ad736fda3f174208c25970dbce

Previously modids were never resused for a
different module, but after dlopen failure all gaps are reused
not just the ones caused by the unfinished dlopened.

The code has to handle reused modids already which seems to
work, however the data races at thread creation and tls access
(see bug 19329 and bug 27111) may be more severe if slots are
reused. Fixing the races are not simpler if reuse is disallowed
and reuse has other benefits so upstream added fix
https://sourceware.org/git/?p=glibc.git;a=commit;h=572bd547d57a39b6cf0ea072545dc4048921f4c3
for the following bug.

Bug 27135: https://sourceware.org/bugzilla/show_bug.cgi?id=27135

But in glibc upstream the commit 572bd547d57a was reverted as the
issue with 572bd547d57a patch was the DTV entry only updated on
dl_open_worker() with the update_tls_slotinfo() call after all
dependencies are being processed by _dl_map_object_deps(). However
_dl_map_object_deps() itself might call _dl_next_tls_modid(),
and since the _dl_tls_dtv_slotinfo_list::map was not yet set the
entry can be wrongly reused.

So added below patch to fix Bug 27135.
0034-elf-Fix-DTV-gap-reuse-logic-BZ-27135.patch
Link: https://sourceware.org/git/?p=glibc.git;a=patch;h=ba33937be210da5d07f7f01709323743f66011ce

Not all TLS access related data races got fixed by adding
0031-elf-Fix-data-races-in-pthread_create-and-TLS-access-BZ-19329.patch,
there are additional races at lazy tlsdesc relocations.
Bug 27137: https://sourceware.org/bugzilla/show_bug.cgi?id=27137

Backported below patches to fix this issue.

0035-x86_64-Avoid-lazy-relocation-of-tlsdesc-BZ-27137.patch
Link: https://sourceware.org/git/?p=glibc.git;a=patch;h=8f7e09f4dbdb5c815a18b8285fbc5d5d7bc17d86

0036-i386-Avoid-lazy-relocation-of-tlsdesc-BZ-27137.patch
Link: https://sourceware.org/git/?p=glibc.git;a=patch;h=ddcacd91cc10ff92d6201eda87047d029c14158d

The fix 0031-elf-Fix-data-races-in-pthread_create-and-TLS-access-BZ-19329.patch
for bug 19329 caused a regression such that pthread_create can
deadlock when concurrent ctors from dlopen are waiting for it
to finish.
Bug 28357: https://sourceware.org/bugzilla/show_bug.cgi?id=28357

Backported below patch to fix this issue.
0037-Avoid-deadlock-between-pthread_create-and-ctors.patch
Link: https://sourceware.org/git/?p=glibc.git;a=patch;h=024a7640ab9ecea80e527f4e4d7f7a1868e952c5

(From OE-Core rev: 01f256bc72fb45c80b6a6c77506bc4c375965a3a)

Signed-off-by: Akash Hadke <akash.hadke@kpit.com>
Signed-off-by: Akash Hadke <hadkeakash4@gmail.com>
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2022-01-22 17:56:53 +00:00
Alexander Kanavin
7a4fa28642 parselogs: add a couple systemd false positives
New systemd has changed the phrasing when skipping things,
with unfortunate use of 'failed':

[    1.623667] systemd[1]: Journal Audit Socket was skipped because of a failed condition check (ConditionSecurity=audit).
[    1.688258] systemd[1]: Load Kernel Modules was skipped because all trigger condition checks failed.

(From OE-Core rev: da0d96eefd5d7e784b24cad0e41b9df05443034d)

Signed-off-by: Alexander Kanavin <alex@linutronix.de>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 743d09665a4ef743b1fa9ac382a713556dfce1a1)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2022-01-22 17:56:53 +00:00
Ross Burton
1e4665204b xserver-xorg: whitelist two CVEs
CVE-2011-4613 is specific to Debian/Ubuntu.

CVE-2020-25697 is a non-trivial attack that may not actually be feasible
considering the default behaviour for clients is to exit if the
connection is lost.

(From OE-Core rev: c477e35d01e7b8443b680f6456ac92a15fbfeaa2)

Signed-off-by: Ross Burton <ross.burton@arm.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit afa2e6c31a79f75ff4113d53f618bbb349cd6c17)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2022-01-22 17:56:53 +00:00
Richard Purdie
07755db699 expat: Update HOMEPAGE to current url
Upstream pointed out we were using an old url for HOMEPAGE. Update it to the
current url.

(From OE-Core rev: 022750aaa128189f23063b741bf8396a527713d7)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit f3a7e2ba247efe72154c263d1d680aaf3da5b609)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2022-01-22 17:56:53 +00:00
Mingli Yu
e1f86e7761 wic: use shutil.which
Use shutil.which to find the executable instead to silence the below warning:
 $ cat tmp/work/intel_x86_64-poky-linux/core-image-base/1.0-r5/temp/log.do_image_wic
 [snip]
 DEBUG: Executing shell function do_image_wic
 /path/layers/oe-core/scripts/wic:27: DeprecationWarning: The distutils package is deprecated and slated for removal in Python 3.12. Use setuptools or check PEP 632 for potential alternatives
  from distutils import spawn
 INFO: Creating image(s)...
 [snip]

[RP: Added conversion for missed function reference]
(From OE-Core rev: 488815681466d5e4c7640df5281fa6e1f9b4c75e)

Signed-off-by: Mingli Yu <mingli.yu@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 3966cbf5c8a2dbc3a4f0f3eefdbeeb83f522bf87)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2022-01-22 17:56:53 +00:00
Ricardo Ribalda Delgado
2be5df9182 wic: misc: Do not find for executables in ASSUME_PROVIDED
Executables like tar won't be available on the native sysroot, as they
are part of the ASSUME_PROVIDED variable.

Cc: Paul Barker <pbarker@konsulko.com>
(From OE-Core rev: eab485069809c991433b9e1b8e4223a555e4d7f9)

Signed-off-by: Ricardo Ribalda Delgado <ricardo@ribalda.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 2f574d535f8665b26dab65c14668cf8fc7b751c0)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2022-01-22 17:56:53 +00:00
Anuj Mittal
192834adc0 xserver-xorg: update CVE_PRODUCT
Some of the CVEs have x_server as the product name.

(From OE-Core rev: 183a62e7de1ded1f271d8ba4d1b149a85159f4bd)

Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 4d5d63cf8605515bb659b6b732683d7fe6540728)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2022-01-22 17:56:53 +00:00
Konrad Weihmann
6ec2230291 cve-check: add lockfile to task
this should prevent running into the very rare error
sqlite3.OperationalError: attempt to write a readonly database

As highlighted by https://www.sqlite.org/faq.html#q5
it is likely that the adapter won't allow use multiple exec calls
at the same time.

So it's best to prevent multiple accesses at a time, by reusing
the already in place CVE_CHECK_DB_FILE_LOCK

YOCTO #14110

(From OE-Core rev: 3c69e4eb08701516150c78cf8b48f3e90d197b2b)

Signed-off-by: Konrad Weihmann <kweihmann@outlook.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 677f5741bd265be49d4a5bb933b3e8d8c4eec653)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2022-01-22 17:56:52 +00:00
Ross Burton
ee62d4540e cve-update-db-native: use fetch task
Instead of inventing a new task to fetch the CVE data, use the existing
fetch task.

(From OE-Core rev: 1ed53d5cfc2be40b2d57b5392ec4d30313209934)

Signed-off-by: Ross Burton <ross.burton@arm.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit f5f97d33a1703d75b9fd9760f2c7767081538e00)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2022-01-22 17:56:52 +00:00
Steve Sakoman
ee9345f864 oeqa/selftest/cases/tinfoil.py: increase timeout 60->120s test_wait_event
The test is timing out on fedora autobuilder workers

(From OE-Core rev: f8e726479d5f4d89f9a7cf8babfe25fd5c73f66e)

Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2022-01-22 17:56:52 +00:00
Steve Sakoman
34ba446157 valgrind: skip flakey ptest (gdbserver_tests/hginfo)
This ptest was already disabled in master branch with: valgrind: skip
broken ptests for glibc 2.34

https://git.openembedded.org/openembedded-core/commit/?id=c177c7f9ef6f90ca49074f003accb8e9a1a645aa

(From OE-Core rev: ead8809ab3182cda04495915551cf3f9b4f5d1f6)

Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2022-01-22 17:56:52 +00:00
Richard Purdie
4a14c922d8 bitbake: tests/fetch: Drop gnu urls from wget connectivity test
These urls are no longer adding much to the test coverage but the intermittent
network issues connecting to them are painful. Drop the urls.

(Bitbake rev: e6d75e0beb95aa0cdf82bbc0a6b767c7f6cfcfc0)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit bdf5739c5d831dc97a7d81568f94a0953c71017f)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2022-01-17 21:53:07 +00:00
Richard Purdie
cbc25057f1 bitbake: utils: Update to use exec_module() instead of load_module()
This is deprecated in python 3.12 and Fedora 35 is throwing warnings so
move to the new functions.

(Bitbake rev: e84c9aa77b61e48f1507edcba7bde65295f4d3ad)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 68a18fbcb5959e334cf307d7fa8dc63832edb942)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2022-01-17 21:53:07 +00:00
Teoh Jay Shen
3432003435 linux-yocto/5.4: update genericx86* machines to v5.4.158
(From meta-yocto rev: 44647201cfcdb4dd11eb1651ab62c64ca2aacb10)

Signed-off-by: Teoh Jay Shen <jay.shen.teoh@intel.com>
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2022-01-11 23:02:39 +00:00
Steve Sakoman
e2aa712775 asciidoc: properly detect and compare Python versions >= 3.10
asciidoc.py cannot properly detect versions of Python >= 3.10

Backport patch from upstream to correct this:

44d2d60952

Fixed upstream in version 9.04, so this patch is not required in master.

(From OE-Core rev: da3bd5e0934b6462ae53225a58305235849b32d5)

Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2022-01-11 22:28:38 +00:00
Alexander Kanavin
d62ff88963 lib/oe/reproducible: correctly set .git location when recursively looking for git repos
(From OE-Core rev: a39e70489038256add6212b86e8728527f750556)

Signed-off-by: Alexander Kanavin <alex@linutronix.de>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit ffdaa1a0527691d66dd28e86bd015bfad7a020f6)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2022-01-11 22:28:38 +00:00
Richard Purdie
6a3354025c scripts: Update to use exec_module() instead of load_module()
This is deprecated in python 3.12 and Fedora 35 is throwing warnings so
move to the new functions.

(From OE-Core rev: c0710d4ffb6c11083daf77fe24129d879f270591)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 655cd3f614d736416eab0d708b7c49674bf5c977)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2022-01-11 22:28:38 +00:00
Steve Sakoman
c1599e44e1 selftest: skip virgl test on fedora 35
This test will fail any time the host has libdrm > 2.4.107

(From OE-Core rev: bb767e338ad25e27e6bf2c7dfdecc639e8105059)

Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2022-01-11 22:28:38 +00:00
Tim Orling
cfd64997c4 scripts/buildhistory-diff: drop use of distutils
The use of distutils.version.LooseVersion to check for GitPython > 0.3.1
is not really needed anymore since any supported distribution has at least
1.0.0 (centos-7 via epel7, debian-9, ubuntu-16.04)

If we want to reinstate this check, alternatives would be to require
python3-packaging on all hosts and use packaging.version.Version or
use an imported LooseVersion in bb.version.

[YOCTO #14610]

(From OE-Core rev: 15b1a82b4cdfadeaf89489929e10aaf9a0edd13d)

Signed-off-by: Tim Orling <timothy.t.orling@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit bc90dcae9f53ddc246942f4d9b8ae8943e3b9754)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2022-01-11 22:28:38 +00:00
Marek Vasut
5457198984 weston: Backport patches to always activate the top-level surface
In case the device has only touchscreen input device and no keyboard or mouse,
the top level surface is never activated. The behavior differs from a device
which has a keyboard (or gpio-keys, or even uinput-emulated keyboard), where
callchain activate()->weston_view_activate()->weston_seat_set_keyboard_focus()->
weston_keyboard_set_focus()->wl_signal_emit(&keyboard->focus_signal, keyboard)->
handle_keyboard_focus()->weston_desktop_surface_set_activated(..., true); sets
the top level surface as activated. On device with touchscreen, the above is
never called, hence the top level surface is never activated. Add explicit
weston_desktop_surface_set_activated(shsurf->desktop_surface, true); into
activate() to always active the top level surface.

This fixes at least two known issues on such devices:
- Wayland terminal cursor is an empty bar (full bar with keyboard present)
- Chromium dropdown menus are randomly placed (they are placed correctly
  when keyboard is present, because then chromium can find the activated
  top level surface)

(From OE-Core rev: 0a2da895284f1687cf75297fb0f4b20cc9b53489)

Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2022-01-11 22:28:38 +00:00
Richard Purdie
b72fe527c9 oeqa/selftest/tinfoil: Update to use test command
We've had IO load issues on the autobuilder with this test. Avoid
those by using a specilised test command instead.

(From OE-Core rev: 351b02feb9cb680aa3dbe4c8ea4162a6456a469f)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 106445b1eb74fc37e03c72a0c011541b50a16c19)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2022-01-11 22:28:38 +00:00
Richard Purdie
9e75884e0a oeqa/selftest/bbtests: Use YP sources mirror instead of GNU
The gnu sources server has been known to disappear. Use the YP sources
mirror instead. If that breaks, the autobuilder is broken anyway. This
should reduce test failures from upstream network issues.

(From OE-Core rev: cc786c759c1454340b72805227f2181d22bd7080)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit a5459e42f1a6be9c08f303653cc1f73514eca9ef)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2022-01-11 22:28:38 +00:00
Richard Purdie
468588819e openssl: Add reproducibility fix
When the date rolled from one year to another, it highlighted a reproducibility
issue in openssl. Patch a workaround for this to avoid autobuilder failures.

(From OE-Core rev: b360fdca923bb3e4a4bf41d705e634eafc0e54c5)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit f8281e290737dba16a46d7ae937c66b3266e0fe8)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2022-01-11 22:28:38 +00:00
Steve Sakoman
2b65abb255 libpcre2: update SRC_URI
Version 10.34 tarball is no longer available at current URL,
use downloads.yoctoproject.org mirror instead

(From OE-Core rev: b24838b8173c6853cdcbff6512a12557e479df86)

Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2022-01-11 22:28:38 +00:00
wangmy
e1fbe6c4a3 linux-firmware: upgrade 20211027 -> 20211216
License-Update: version of license file updated.

(From OE-Core rev: 904eb89c0ff22be32209eb0a8a569911f1969673)

Signed-off-by: Wang Mingyu <wangmy@fujitsu.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 07dc668ddc50de14821aff1b6850d8b4999702bd)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2022-01-11 22:28:38 +00:00
Marta Rybczynska
c55481b806 grub: fix CVE-2020-14372 and CVE-2020-27779
Fix issues with grub in secure boot mode where an attacker could circumvent
secure boot by using acpi and cutmem commands. Also include patches fixing
similar issues.

Most patches are backported directly from grub. One patch
(no-insmod-on-sb.patch) comes from Debian, as the upstream implementation is
too complicated to backport.

CVE-2020-14372 description (from NVD [1]):
A flaw was found in grub2 in versions prior to 2.06, where it incorrectly
enables the usage of the ACPI command when Secure Boot is enabled.
This flaw allows an attacker with privileged access to craft a Secondary
System Description Table (SSDT) containing code to overwrite the Linux
kernel lockdown variable content directly into memory. The table is
further loaded and executed by the kernel, defeating its Secure Boot
lockdown and allowing the attacker to load unsigned code. The highest
threat from this vulnerability is to data confidentiality and integrity,
as well as system availability.

CVE-2020-27779 description (from NVD [2]):
A flaw was found in grub2 in versions prior to 2.06. The cutmem command
does not honor secure boot locking allowing an privileged attacker to
remove address ranges from memory creating an opportunity to circumvent
SecureBoot protections after proper triage about grub's memory layout.
The highest threat from this vulnerability is to data confidentiality
and integrity as well as system availability.

[1] https://nvd.nist.gov/vuln/detail/CVE-2020-14372
[2] https://nvd.nist.gov/vuln/detail/CVE-2020-27779

(From OE-Core rev: da6c0f3cfc920cea57cd409b17303bf735ccd68d)

Signed-off-by: Marta Rybczynska <marta.rybczynska@huawei.com>
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2022-01-11 22:28:38 +00:00
Richard Purdie
6e6ede294c bitbake: cooker/command: Add a dummy event for tinfoil testing
We need a command genetating an event to test through the tinfoil API. The
current test has IO load issues so add a dummy version which won't have
the IO constraints.

(Bitbake rev: c5969eedd035648e3258bade386cc67ce3bb0e03)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit a144178584394ea0700ffc2f2bfac94e8690effc)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2022-01-07 23:43:50 +00:00
Michael Opdenacker
0490ee5944 ref-manual: fix patch documentation
The do_patch implementation does not apply patches from an entry in
SRC_URI pointing to a directory.
Remove the claim that this is implemented.

(From yocto-docs rev: 9c5533b45bfd6a3d383e973a2c40e0f418afcbe9)

Signed-off-by: Michael Opdenacker <michael.opdenacker@bootlin.com>
Reported-by: Max Krummenacher <max.krummenacher@toradex.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2022-01-07 11:12:46 +00:00
Michael Opdenacker
ee0220a2bb documentation: further updates for 3.1.13
(From yocto-docs rev: 89323c1df4f8026ed67fc9eccfee516f7735c267)

Signed-off-by: Michael Opdenacker <michael.opdenacker@bootlin.com>
Reported-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2022-01-03 22:17:13 +00:00
Michael Halstead
56e9d560b0 releases: update to include 3.1.13
Adding 3.1.13 to documentation switcher and release list.

(From yocto-docs rev: 8debc43c165b8732ed00ffe249b0ada6109e53d9)

Signed-off-by: Michael Halstead <mhalstead@linuxfoundation.org>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2022-01-03 22:17:13 +00:00
Steve Sakoman
98d21218fc selftest: skip virgl test on fedora 34 entirely
Fedora 34 recently updated libdrm to 2.4.109 and this test will fail any
time the host has libdrm > 2.4.107

(From OE-Core rev: 1ab7aee542589f6b6c76f8515b4230ce870a8678)

Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-30 16:59:16 +00:00
Anuj Mittal
846e457b35 gstreamer1.0: fix failing ptest
Backport a patch to increase the timeout that might help with the
intermittent seek test failure.

[YOCTO #14194]
[YOCTO #14669]

(From OE-Core rev: a7dc7a35334ad634926a1386f4a56b27aad3ce68)

(From OE-Core rev: a3fe157cfd965d46d7ba30df92a0e80b5ab24a1f)

Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 7b90027aac)
Signed-off-by: Jose Quaresma <quaresma.jose@gmail.com>
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-30 16:59:16 +00:00
Bruce Ashfield
8a1fc484cc linux-yocto/5.4: update to v5.4.167
Updating linux-yocto/5.4 to the latest korg -stable release that comprises
the following commits:

e8ef940326ef Linux 5.4.167
c97579584fa8 arm: ioremap: don't abuse pfn_valid() to check if pfn is in RAM
6026d4032dbb arm: extend pfn_valid to take into account freed memory map alignment
492f4d3cde95 memblock: ensure there is no overflow in memblock_overlaps_region()
bdca964781a0 memblock: align freed memory map on pageblock boundaries with SPARSEMEM
60111b30be0b memblock: free_unused_memmap: use pageblock units instead of MAX_ORDER
3e8e272805e7 hwmon: (dell-smm) Fix warning on /proc/i8k creation error
f6f1d1911492 bpf: Fix integer overflow in argument calculation for bpf_map_area_alloc
b06b1f46306a selinux: fix race condition when computing ocontext SIDs
2fb8e4267c47 KVM: x86: Ignore sparse banks size for an "all CPUs", non-sparse IPI req
467359957ad2 tracing: Fix a kmemleak false positive in tracing_map
fb8cd2b336e4 drm/amd/display: add connector type check for CRC source set
8fc2f28e3348 drm/amd/display: Fix for the no Audio bug with Tiled Displays
c0315e93552e net: netlink: af_netlink: Prevent empty skb by adding a check on len.
7ff666e6fdc0 i2c: rk3x: Handle a spurious start completion interrupt flag
409ecd029ac5 parisc/agp: Annotate parisc agp init functions with __init
4233fbd459ac net/mlx4_en: Update reported link modes for 1/10G
b6158d968b3e drm/msm/dsi: set default num_data_lanes
d731ecc6f2ea nfc: fix segfault in nfc_genl_dump_devices_done
c32c40ff8092 Linux 5.4.166
eb1b5eaaddec netfilter: selftest: conntrack_vrf.sh: fix file permission

(From OE-Core rev: ebfe803e9545b862416e3a647c7a5e19e9c6acbd)

Signed-off-by: Bruce Ashfield <bruce.ashfield@gmail.com>
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-30 16:59:16 +00:00
Bruce Ashfield
b2c0b6caf9 linux-yocto/5.4: update to v5.4.165
Updating linux-yocto/5.4 to the latest korg -stable release that comprises
the following commits:

7f70428f0109 Linux 5.4.165
3a99b4baff3c bpf: Add selftests to cover packet access corner cases
b8a2c49aa956 misc: fastrpc: fix improper packet size calculation
8f9a25e452f8 irqchip: nvic: Fix offset for Interrupt Priority Offsets
61981e5fee6d irqchip/irq-gic-v3-its.c: Force synchronisation when issuing INVALL
fc20091b3f97 irqchip/armada-370-xp: Fix support for Multi-MSI interrupts
a3689e694b39 irqchip/armada-370-xp: Fix return value of armada_370_xp_msi_alloc()
8c163a142771 iio: accel: kxcjk-1013: Fix possible memory leak in probe and remove
20f0fb418b6c iio: ad7768-1: Call iio_trigger_notify_done() on error
b68f44829b73 iio: adc: axp20x_adc: fix charging current reporting on AXP22x
e79d86de1e96 iio: at91-sama5d2: Fix incorrect sign extension
5f3d932f91cb iio: dln2: Check return value of devm_iio_trigger_register()
7447f0450825 iio: dln2-adc: Fix lockdep complaint
4c0fa7ed5a3a iio: itg3200: Call iio_trigger_notify_done() on error
e67d60c5ebb0 iio: kxsd9: Don't return error code in trigger handler
f143cfdccfc9 iio: ltr501: Don't return error code in trigger handler
acf0088ac073 iio: mma8452: Fix trigger reference couting
02553e971255 iio: stk3310: Don't return error code in interrupt handler
1374297ccf61 iio: trigger: stm32-timer: fix MODULE_ALIAS
1dadba28a829 iio: trigger: Fix reference counting
ec0cddcc2454 xhci: avoid race between disable slot command and host runtime suspend
8d45969ca31a usb: core: config: using bit mask instead of individual bits
d1eee0a3936f xhci: Remove CONFIG_USB_DEFAULT_PERSIST to prevent xHCI from runtime suspending
d2f242d7a9ce usb: core: config: fix validation of wMaxPacketValue entries
9978777c5409 USB: gadget: zero allocate endpoint 0 buffers
fd6de5a0cd42 USB: gadget: detect too-big endpoint 0 requests
46d3477cdef3 selftests/fib_tests: Rework fib_rp_filter_test()
caff29d1129c net/qla3xxx: fix an error code in ql_adapter_up()
4aa28ac9373c net, neigh: clear whole pneigh_entry at alloc time
f23f60e81af2 net: fec: only clear interrupt of handling queue in fec_enet_rx_queue()
05bc4d266eaf net: altera: set a couple error code in probe()
84a890d6959e net: cdc_ncm: Allow for dwNtbOutMaxSize to be unset or zero
e9ca63a07dd3 tools build: Remove needless libpython-version feature check that breaks test-all fast path
49e59d514408 dt-bindings: net: Reintroduce PHY no lane swap binding
b78a27fa58cc mtd: rawnand: fsmc: Fix timing computation
7596d0deec7f mtd: rawnand: fsmc: Take instruction delay into account
9f88ca269c41 i40e: Fix pre-set max number of queues for VF
171527da8414 i40e: Fix failed opcode appearing if handling messages from VF
ee8bfa62bf79 ASoC: qdsp6: q6routing: Fix return value from msm_routing_put_audio_mixer
43dcb79c1d9b qede: validate non LSO skb length
727858a98ac9 block: fix ioprio_get(IOPRIO_WHO_PGRP) vs setuid(2)
9ba5635cfad7 tracefs: Set all files to the same group ownership as the mount option
4105e6a128e8 aio: fix use-after-free due to missing POLLFREE handling
380185111fa8 aio: keep poll requests on waitqueue until completed
aac8151624b6 signalfd: use wake_up_pollfree()
1a478a0522e5 binder: use wake_up_pollfree()
e0c03d15cd03 wait: add wake_up_pollfree()
6db0db1657cb libata: add horkage for ASMedia 1092
050ac9da6768 x86/sme: Explicitly map new EFI memmap table as encrypted
9f5b334ee654 can: m_can: Disable and ignore ELO interrupt
abb4eff3dcd2 can: pch_can: pch_can_rx_normal: fix use after free
291a164ac1f3 drm/syncobj: Deal with signalled fences in drm_syncobj_find_fence.
f53b73953ff8 clk: qcom: regmap-mux: fix parent clock lookup
e871f89ebfe2 tracefs: Have new files inherit the ownership of their parent
f5734b1714ca nfsd: Fix nsfd startup race (again)
412498e9e54b btrfs: replace the BUG_ON in btrfs_del_root_ref with proper error handling
aa4740bc8595 btrfs: clear extent buffer uptodate when we fail to write it
434927e938ce ALSA: pcm: oss: Handle missing errors in snd_pcm_oss_change_params*()
76f19e4cbb54 ALSA: pcm: oss: Limit the period size to 16MB
f12c8a7515f6 ALSA: pcm: oss: Fix negative period/buffer sizes
5b06fa0cd2be ALSA: hda/realtek - Add headset Mic support for Lenovo ALC897 platform
caaea6bd3e18 ALSA: ctl: Fix copy of updated id with element read/write
a7ea5c099ad4 mm: bdi: initialize bdi_min_ratio when bdi is unregistered
b8a79804056b IB/hfi1: Correct guard on eager buffer deallocation
ab1be91cf1ec iavf: Fix reporting when setting descriptor count
c21bb711d0fb iavf: restore MSI state on reset
c8ae8c812e16 udp: using datalen to cap max gso segments
ef8804e47c0a seg6: fix the iif in the IPv6 socket control block
2e0e072e62fd nfp: Fix memory leak in nfp_cpp_area_cache_add()
3db6482523ea bonding: make tx_rebalance_counter an atomic
143ceb9b6736 ice: ignore dropped packets during init
4174bd4221c2 bpf: Fix the off-by-two error in range markings
15f987473d33 vrf: don't run conntrack on vrf with !dflt qdisc
8d3563ecbca3 selftests: netfilter: add a vrf+conntrack testcase
48fcd08fdbe0 nfc: fix potential NULL pointer deref in nfc_genl_dump_ses_done
1a295fea90e1 can: sja1000: fix use after free in ems_pcmcia_add_card()
fbcb12bc9dbf can: kvaser_pciefd: kvaser_pciefd_rx_error_frame(): increase correct stats->{rx,tx}_errors counter
68daa476f499 can: kvaser_usb: get CAN clock frequency from device
a7944962ee1f HID: check for valid USB device for many HID drivers
e9114b9dc8ea HID: wacom: fix problems when device is not a valid USB device
8e0ceff632f4 HID: bigbenff: prevent null pointer dereference
31520ec149d2 HID: add USB_HID dependancy on some USB HID drivers
f8a6538587b4 HID: add USB_HID dependancy to hid-chicony
ee8477d1dbce HID: add USB_HID dependancy to hid-prodikeys
6e1e0a014258 HID: add hid_is_usb() function to make it simpler for USB detection
1e8db541c2be HID: google: add eel USB id
cb7b13c98218 HID: quirks: Add quirk for the Microsoft Surface 3 type-cover
f99b2013793f ntfs: fix ntfs_test_inode and ntfs_init_locked_inode function type
eb246f58e1fc serial: tegra: Change lower tolerance baud rate limit for tegra20 and tegra30
e3c95128def1 Linux 5.4.164
5df7d6a012fc ipmi: msghandler: Make symbol 'remove_work_wq' static
5d1e83fffbc9 net/tls: Fix authentication failure in CCM mode
cffd7583c92e parisc: Mark cr16 CPU clocksource unstable on all SMP machines
23b40edec832 iwlwifi: mvm: retry init flow if failed
8d6e4b422d0c serial: 8250_pci: rewrite pericom_do_set_divisor()
181cf7622ce2 serial: 8250_pci: Fix ACCES entries in pci_serial_quirks array
c5da8aa44105 serial: core: fix transmit-buffer reset and memleak
7ed4a98a174c serial: pl011: Add ACPI SBSA UART match id
9e16682c94ec tty: serial: msm_serial: Deactivate RX DMA for polling support
b5dd5a467ec6 x86/64/mm: Map all kernel memory into trampoline_pgd
72736a3b90ef x86/tsc: Disable clocksource watchdog for TSC on qualified platorms
fe3cd48420cd x86/tsc: Add a timer to make sure TSC_adjust is always checked
957a203fe1b7 usb: typec: tcpm: Wait in SNK_DEBOUNCED until disconnect
7fbde744374e USB: NO_LPM quirk Lenovo Powered USB-C Travel Hub
095a39a2cc27 xhci: Fix commad ring abort, write all 64 bits to CRCR register.
caedb12c7737 vgacon: Propagate console boot parameters before calling `vc_resize'
a42944686249 parisc: Fix "make install" on newer debian releases
fbe7eacab7eb parisc: Fix KBUILD_IMAGE for self-extracting kernel
c6a9060be53f sched/uclamp: Fix rq->uclamp_max not set on first enqueue
8ae8ccd2402f KVM: x86/pmu: Fix reserved bits for AMD PerfEvtSeln register
ee38eb8cf9a7 ipv6: fix memory leak in fib6_rule_suppress
9d1596282644 drm/msm: Do hw_init() before capturing GPU state
10bad5a1977f net/smc: Keep smc_close_final rc during active close
3f2a23fd13ff net/rds: correct socket tunable error in rds_tcp_tune()
01c60b3f477b ipv4: convert fib_num_tclassid_users to atomic_t
efb073981756 net: annotate data-races on txq->xmit_lock_owner
bfec04c689af net: marvell: mvpp2: Fix the computation of shared CPUs
d4034bb9b532 net: usb: lan78xx: lan78xx_phy_init(): use PHY_POLL instead of "0" if no IRQ is available
3e70e3a72d80 rxrpc: Fix rxrpc_local leak in rxrpc_lookup_peer()
ae8a253f3fe6 selftests: net: Correct case name
e461a9816a1a net/mlx4_en: Fix an use-after-free bug in mlx4_en_try_alloc_resources()
af120fcffd64 siphash: use _unaligned version by default
f70c6281eafb net: mpls: Fix notifications when deleting a device
bbeb0325a746 net: qlogic: qlcnic: Fix a NULL pointer dereference in qlcnic_83xx_add_rings()
49ab33623107 natsemi: xtensa: fix section mismatch warnings
063d2233623a i2c: cbus-gpio: set atomic transfer callback
f5d7bd03f888 i2c: stm32f7: stop dma transfer in case of NACK
9fce2ead76f4 i2c: stm32f7: recover the bus on access timeout
bc0215cbd162 i2c: stm32f7: flush TX FIFO upon transfer errors
742a5ae18c5f sata_fsl: fix warning in remove_proc_entry when rmmod sata_fsl
77393806c76b sata_fsl: fix UAF in sata_fsl_port_stop when rmmod sata_fsl
03d4462ba3bc fget: check that the fd still exists after getting a ref to it
a78b607e1b43 s390/pci: move pseudo-MMIO to prevent MIO overlap
006edd736dc8 cpufreq: Fix get_cpu_device() failure in add_cpu_dev_symlink()
648813c26d64 ipmi: Move remove_work to dedicated workqueue
3f8f7eef8c32 rt2x00: do not mark device gone on EPROTO errors during start
c2e2ccaac3d9 kprobes: Limit max data_size of the kretprobe instances
03ee5e8c63c3 vrf: Reset IPCB/IP6CB when processing outbound pkts in vrf dev xmit
f82013d1d68f net/smc: Avoid warning of possible recursive locking
df5990db088d perf report: Fix memory leaks around perf_tip()
b380d09e44e8 perf hist: Fix memory leak of a perf_hpp_fmt
57247f703539 net: ethernet: dec: tulip: de4x5: fix possible array overflows in type3_infoblock()
77ff16690945 net: tulip: de4x5: fix the problem that the array 'lp->phy[8]' may be out of bound
99bb25cb6753 ethernet: hisilicon: hns: hns_dsaf_misc: fix a possible array overflow in hns_dsaf_ge_srst_by_port()
0f89c59e75ac ata: ahci: Add Green Sardine vendor ID as board_ahci_mobile
36c8f686956d scsi: iscsi: Unblock session then wake up error handler
dbbc8aeaf7a1 thermal: core: Reset previous low and high trip during thermal zone init
ebc8aed3b9eb btrfs: check-integrity: fix a warning on write caching disabled disk
5db28ea9f1a4 s390/setup: avoid using memblock_enforce_memory_limit
5d93fc221c5d platform/x86: thinkpad_acpi: Fix WWAN device disabled issue after S3 deep
96274948989c net: return correct error code
89d15a2e40d7 atlantic: Fix OOB read and write in hw_atl_utils_fw_rpc_wait
d6e981ec9491 net/smc: Transfer remaining wait queue entries during fallback
a1671b224bc0 mac80211: do not access the IV when it was stripped
3200cf7b9b7e drm/sun4i: fix unmet dependency on RESET_CONTROLLER for PHY_SUN6I_MIPI_DPHY
7ef990365059 gfs2: Fix length of holes reported at end-of-file
fe915dbd0f83 can: j1939: j1939_tp_cmd_recv(): check the dst address of TP.CM_BAM
fb158a26544c arm64: dts: mcbin: support 2W SFP modules
39b3b131d10d of: clk: Make <linux/of_clk.h> self-contained
aad716bd144a NFSv42: Fix pagecache invalidation after COPY/CLONE

(From OE-Core rev: 2784863606e27715ee5e7f582bb6c4df67879c95)

Signed-off-by: Bruce Ashfield <bruce.ashfield@gmail.com>
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-30 16:59:16 +00:00
Bruce Ashfield
d19c2eba98 linux-yocto/5.4: update to v5.4.163
Updating linux-yocto/5.4 to the latest korg -stable release that comprises
the following commits:

57899c4e26bf Linux 5.4.163
6c728efe164f tty: hvc: replace BUG_ON() with negative return value
c3024e1945fe xen/netfront: don't trust the backend response data blindly
828b1d3861a1 xen/netfront: disentangle tx_skb_freelist
5b757077dacd xen/netfront: don't read data from request on the ring page
5c374d830e1b xen/netfront: read response from backend only once
3456a07614b1 xen/blkfront: don't trust the backend response data blindly
6392f51a9d2e xen/blkfront: don't take local copy of a request from the ring page
ce011335cb42 xen/blkfront: read response from backend only once
61826a7884cb xen: sync include/xen/interface/io/ring.h with Xen's newest version
54f682cd4849 fuse: release pipe buf after last use
eff32973ecc3 NFC: add NCI_UNREG flag to eliminate the race
43788453983e shm: extend forced shm destroy to support objects from several IPC nses
b23c0c4c9e0a s390/mm: validate VMA in PGSTE manipulation functions
3c9a213e0edb tracing: Check pid filtering when creating events
dda227cccf14 vhost/vsock: fix incorrect used length reported to the guest
2eacc0acf6ea smb3: do not error on fsync when readonly
51be334da375 f2fs: set SBI_NEED_FSCK flag when inconsistent node block found
3ceecea047c2 net: mscc: ocelot: correctly report the timestamping RX filters in ethtool
ee4e3f9d3dd7 net: mscc: ocelot: don't downgrade timestamping RX filters in SIOCSHWTSTAMP
0ea2e5497b8c net: hns3: fix VF RSS failed problem after PF enable multi-TCs
3b961640399b net/smc: Don't call clcsock shutdown twice when smc shutdown
5e44178864b3 net: vlan: fix underflow for the real_dev refcnt
296139e1de16 MIPS: use 3-level pgtable for 64KB page size on MIPS_VA_BITS_48
9f5838471aed igb: fix netpoll exit with traffic
25980820c4f0 nvmet: use IOCB_NOWAIT only if the filesystem supports it
d54662a91faa tcp_cubic: fix spurious Hystart ACK train detections for not-cwnd-limited flows
562fe6a6d2c5 PM: hibernate: use correct mode for swsusp_close()
2654e6cfc483 net/ncsi : Add payload to be 32-bit aligned to fix dropped packets
080f6b694ef1 nvmet-tcp: fix incomplete data digest send
6c0ab2caa8d1 net/smc: Ensure the active closing peer first closes clcsock
7854de57be29 scsi: core: sysfs: Fix setting device state to SDEV_RUNNING
67a6f64a0c84 net: nexthop: release IPv6 per-cpu dsts when replacing a nexthop group
cca61bb17042 net: ipv6: add fib6_nh_release_dsts stub
ddd0518c1e09 nfp: checking parameter process for rx-usecs/tx-usecs is invalid
b638eb32c64d ipv6: fix typos in __ip6_finish_output()
8029ced6d775 iavf: Prevent changing static ITR values if adaptive moderation is on
4374e414fcbf drm/vc4: fix error code in vc4_create_object()
7e324f734a91 scsi: mpt3sas: Fix kernel panic during drive powercycle test
dc9eb93d5a0a ARM: socfpga: Fix crash with CONFIG_FORTIRY_SOURCE
a078967dd34b NFSv42: Don't fail clone() unless the OP_CLONE operation failed
ce50e97a06bd firmware: arm_scmi: pm: Propagate return value to caller
7360abf31ce0 net: ieee802154: handle iftypes as u32
4421a196fdaf ASoC: topology: Add missing rwsem around snd_ctl_remove() calls
76867d0cb83f ASoC: qdsp6: q6routing: Conditionally reset FrontEnd Mixer
a848a22e9434 ARM: dts: BCM5301X: Add interrupt properties to GPIO node
03f7379e2c69 ARM: dts: BCM5301X: Fix I2C controller interrupt
17a763eab714 netfilter: ipvs: Fix reuse connection if RS weight is 0
fd7974c547ab proc/vmcore: fix clearing user buffer by properly using clear_user()
66d6eacba7a6 arm64: dts: marvell: armada-37xx: Set pcie_reset_pin to gpio function
3a4baf070c6a pinctrl: armada-37xx: Correct PWM pins definitions
086226048bcd PCI: aardvark: Fix support for PCI_BRIDGE_CTL_BUS_RESET on emulated bridge
7c517d7b8898 PCI: aardvark: Set PCI Bridge Class Code to PCI Bridge
44b2776a9307 PCI: aardvark: Fix support for bus mastering and PCI_COMMAND on emulated bridge
bbc6201152fb PCI: aardvark: Fix link training
3d770a20950b PCI: aardvark: Simplify initialization of rootcap on virtual bridge
a06ace0d317d PCI: aardvark: Implement re-issuing config requests on CRS response
75faadcc3a0e PCI: aardvark: Fix PCIe Max Payload Size setting
c697885a1281 PCI: aardvark: Configure PCIe resources from 'ranges' DT property
e3c51ac70aae PCI: pci-bridge-emul: Fix array overruns, improve safety
ea6eef03dafb PCI: aardvark: Update comment about disabling link training
fe8a8c3a408e PCI: aardvark: Move PCIe reset card code to advk_pcie_train_link()
14311e77c93e PCI: aardvark: Fix compilation on s390
93491c5d26f7 PCI: aardvark: Don't touch PCIe registers if no card connected
8b0f7b8b7839 PCI: aardvark: Replace custom macros by standard linux/pci_regs.h macros
e090b2e2708e PCI: aardvark: Issue PERST via GPIO
0ad291db2d01 PCI: aardvark: Improve link training
063a98c00528 PCI: aardvark: Train link immediately after enabling training
bbe213fd12fb PCI: aardvark: Fix big endian support
5551081d845e PCI: aardvark: Wait for endpoint to be ready before training link
65d962199b7f PCI: aardvark: Deduplicate code in advk_pcie_rd_conf()
57c7d46e8b1d mdio: aspeed: Fix "Link is Down" issue
e466278662be mmc: sdhci: Fix ADMA for PAGE_SIZE >= 64KiB
e09e868c6341 tracing: Fix pid filtering when triggers are attached
f5bbebfd7ca1 tracing/uprobe: Fix uprobe_perf_open probes iteration
5c895828f421 KVM: PPC: Book3S HV: Prevent POWER7/8 TLB flush flushing SLB
4f1adc3f572a xen: detect uninitialized xenbus in xenbus_init
173fe1aedf67 xen: don't continue xenstore initialization in case of errors
2e1ec01af2c7 staging: rtl8192e: Fix use after free in _rtl92e_pci_disconnect()
e72e981d16fc staging/fbtft: Fix backlight
9b406e39e539 HID: wacom: Use "Confidence" flag to prevent reporting invalid contacts
c03ad97293d2 Revert "parisc: Fix backtrace to always include init funtion names"
4a6f918a92b0 media: cec: copy sequence field for the reply
8d0b9ea19174 ALSA: ctxfi: Fix out-of-range access
aaa83768ba39 binder: fix test regression due to sender_euid change
d797fde8644a usb: hub: Fix locking issues with address0_mutex
4b354aeea431 usb: hub: Fix usb enumeration issue due to address0 race
d00bf013aed2 usb: typec: fusb302: Fix masking of comparator and bc_lvl interrupts
7b6f44856da5 net: nexthop: fix null pointer dereference when IPv6 is not enabled
9ad421aedc55 usb: dwc2: hcd_queue: Fix use of floating point literal
e44a934f9e04 usb: dwc2: gadget: Fix ISOC flow for elapsed frames
c2e05c4ed8a3 USB: serial: option: add Fibocom FM101-GL variants
ee034eae9d9b USB: serial: option: add Telit LE910S1 0x9200 composition

(From OE-Core rev: 94264cb2b1355a9b91bbbe701da858866cccb370)

Signed-off-by: Bruce Ashfield <bruce.ashfield@gmail.com>
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-30 16:59:16 +00:00
Bruce Ashfield
f06e7a026d linux-yocto/5.4: update to v5.4.162
Updating linux-yocto/5.4 to the latest korg -stable release that comprises
the following commits:

9334f48f5673 Linux 5.4.162
46a8e16fcf2c ALSA: hda: hdac_stream: fix potential locking issue in snd_hdac_stream_assign()
293385739d68 ALSA: hda: hdac_ext_stream: fix potential locking issues
201340ca4eb7 hugetlbfs: flush TLBs correctly after huge_pmd_unshare
e7891b22b251 tlb: mmu_gather: add tlb_flush_*_range APIs
10e34766d8ac ice: Delete always true check of PF pointer
101485e566ce usb: max-3421: Use driver data instead of maintaining a list of bound devices
4e1b3e718f24 ASoC: DAPM: Cover regression by kctl change notification fix
56a32c82761a batman-adv: Don't always reallocate the fragmentation skb head
08bceb1e30c2 batman-adv: Reserve needed_*room for fragments
374c55d416ab batman-adv: Consider fragmentation for needed_headroom
9eff9854f82d perf/core: Avoid put_page() when GUP fails
e0122ea133cd Revert "net: mvpp2: disable force link UP during port init procedure"
4efa2509d3aa drm/amdgpu: fix set scaling mode Full/Full aspect/Center not works on vga and dvi connectors
c0276de0be48 drm/i915/dp: Ensure sink rate values are always valid
1c4af56ffbfb drm/nouveau: use drm_dev_unplug() during device removal
9e98622aa508 drm/udl: fix control-message timeout
52affc201fc2 cfg80211: call cfg80211_stop_ap when switch from P2P_GO type
ca9834a1148b parisc/sticon: fix reverse colors
670f6b3867c8 btrfs: fix memory ordering between normal and ordered work functions
1c3882215946 udf: Fix crash after seekdir
f79957d274b0 s390/kexec: fix memory leak of ipl report buffer
b0e44dfb4e4c x86/hyperv: Fix NULL deref in set_hv_tscchange_cb() if Hyper-V setup fails
f2e0cd42f198 mm: kmemleak: slob: respect SLAB_NOLEAKTRACE flag
95de3703a1d0 ipc: WARN if trying to remove ipc object which is absent
8997bb6d1ecc hexagon: export raw I/O routines for modules
01a7ecd36d1e tun: fix bonding active backup with arp monitoring
7c8f778f0a3a arm64: vdso32: suppress error message for 'make mrproper'
e636f65b3d8f s390/kexec: fix return code handling
cc093e5a966d perf/x86/intel/uncore: Fix IIO event constraints for Skylake Server
cc63a789d80d perf/x86/intel/uncore: Fix filter_tid mask for CHA events on Skylake Server
47a810817823 KVM: PPC: Book3S HV: Use GLOBAL_TOC for kvmppc_h_set_dabr/xdabr()
307d2e6cebfc NFC: reorder the logic in nfc_{un,}register_device
da3a87eeb990 drm/nouveau: hdmigv100.c: fix corrupted HDMI Vendor InfoFrame
e418bb556ff8 NFC: reorganize the functions in nci_request
bbb8376d58ac i40e: Fix display error code in dmesg
69e5d27af579 i40e: Fix creation of first queue by omitting it if is not power of two
5564e9129f1f i40e: Fix ping is lost after configuring ADq on VF
8509178dc001 i40e: Fix changing previously set num_queue_pairs for PFs
c30162da9132 i40e: Fix NULL ptr dereference on VSI filter sync
0a0308af22a5 i40e: Fix correct max_pkt_size on VF RX queue
fb2dbc124a7f net: virtio_net_hdr_to_skb: count transport header in UFO
d74ff10ed2d9 net: dpaa2-eth: fix use-after-free in dpaa2_eth_remove
8b2c66b0f2a0 net: sched: act_mirred: drop dst for the direction from egress to ingress
edd783162bf2 scsi: core: sysfs: Fix hang when device state is set via sysfs
446882f216ac platform/x86: hp_accel: Fix an error handling path in 'lis3lv02d_probe()'
453b5b614b93 mips: lantiq: add support for clk_get_parent()
477653f3e4e4 mips: bcm63xx: add support for clk_get_parent()
426fed211b49 MIPS: generic/yamon-dt: fix uninitialized variable error
67334abd4fb7 iavf: Fix for the false positive ASQ/ARQ errors while issuing VF reset
98f3badc414f iavf: validate pointers
92cecf349121 iavf: prevent accidental free of filter structure
63f032a956ed iavf: Fix failure to exit out from last all-multicast mode
926e8c83d4c1 iavf: free q_vectors before queues in iavf_disable_vf
f0222e7eee0c iavf: check for null in iavf_fix_features
b5638bc64a69 net: bnx2x: fix variable dereferenced before check
fbba0692ec4b perf tests: Remove bash construct from record+zstd_comp_decomp.sh
9e0df711f8db perf bench futex: Fix memory leak of perf_cpu_map__new()
642fc22210a5 perf bpf: Avoid memory leak from perf_env__insert_btf()
6bf5523090a7 RDMA/netlink: Add __maybe_unused to static inline in C file
ef82c3716a5a tracing/histogram: Do not copy the fixed-size char array field over the field size
80b777606925 tracing: Save normal string variables
8928e31a776a sched/core: Mitigate race cpus_share_cache()/update_top_cache_domain()
a93a58bae950 mips: BCM63XX: ensure that CPU_SUPPORTS_32BIT_KERNEL is set
05311b9192be clk: qcom: gcc-msm8996: Drop (again) gcc_aggre1_pnoc_ahb_clk
ee1317e1f4b0 clk/ast2600: Fix soc revision for AHB
d6c32b4c83f6 clk: ingenic: Fix bugs with divided dividers
982d31ba5533 sh: define __BIG_ENDIAN for math-emu
214cd15d3675 sh: math-emu: drop unused functions
3d774e776f68 sh: fix kconfig unmet dependency warning for FRAME_POINTER
7727659e45f8 f2fs: fix up f2fs_lookup tracepoints
d7c612f6b1f3 maple: fix wrong return value of maple_bus_init().
9823ba8f17f8 sh: check return code of request_irq
94292e4577a2 powerpc/dcr: Use cmplwi instead of 3-argument cmpli
c6d2cefdd05c ALSA: gus: fix null pointer dereference on pointer block
513543f1eda1 powerpc/5200: dts: fix memory node unit name
3a9eae47a550 iio: imu: st_lsm6dsx: Avoid potential array overflow in st_lsm6dsx_set_odr()
a3ecee8a8fd7 scsi: target: Fix alua_tg_pt_gps_count tracking
14934afd4f5d scsi: target: Fix ordered tag handling
1ab3b4f4f46f MIPS: sni: Fix the build
d491c84df5c4 tty: tty_buffer: Fix the softlockup issue in flush_to_ldisc
80709beddb8d ALSA: ISA: not for M68K
2f8cda43c415 ARM: dts: ls1021a-tsn: use generic "jedec,spi-nor" compatible for flash
723c1af01c35 ARM: dts: ls1021a: move thermal-zones node out of soc/
f98986b7acb4 usb: host: ohci-tmio: check return value after calling platform_get_resource()
e187c2f3f25e ARM: dts: omap: fix gpmc,mux-add-data type
3b9d8d3e4af2 firmware_loader: fix pre-allocated buf built-in firmware use
cc248790bfdc scsi: advansys: Fix kernel pointer leak
bcc1eac0bd49 ASoC: nau8824: Add DMI quirk mechanism for active-high jack-detect
c9428e13417d clk: imx: imx6ul: Move csi_sel mux to correct base register
e5f8c43c8546 ASoC: SOF: Intel: hda-dai: fix potential locking issue
cb074c00b71a arm64: dts: freescale: fix arm,sp805 compatible string
a14d7038ea20 arm64: dts: qcom: msm8998: Fix CPU/L2 idle state latency and residency
30dcfcda8992 usb: typec: tipd: Remove WARN_ON in tps6598x_block_read
3ee15f1af174 usb: musb: tusb6010: check return value after calling platform_get_resource()
ba9579f832bd RDMA/bnxt_re: Check if the vlan is valid before reporting
bf6a633b0736 arm64: dts: hisilicon: fix arm,sp805 compatible string
16bcbfb56d75 scsi: lpfc: Fix list_add() corruption in lpfc_drain_txq()
51c94d6aee59 ARM: dts: NSP: Fix mpcore, mmc node names
1390f32ea964 arm64: zynqmp: Fix serial compatible string
31df0f0f1882 arm64: zynqmp: Do not duplicate flash partition label property
5c088fba39af Linux 5.4.161
b786cb3236e1 erofs: fix unsafe pagevec reuse of hooked pclusters
83de35ae27a1 erofs: remove the occupied parameter from z_erofs_pagevec_enqueue()
b37f6da8c3fc PCI: Add MSI masking quirk for Nvidia ION AHCI
db1390b60e89 PCI/MSI: Deal with devices lying about their MSI mask capability
49b55a7792ec PCI/MSI: Destroy sysfs before freeing entries
7186be970c11 parisc/entry: fix trace test in syscall exit path
258c42a8fb31 fortify: Explicitly disable Clang support
4f9a3cda1660 scsi: ufs: Fix tm request when non-fatal error happens
c468f9249d84 ext4: fix lazy initialization next schedule time computation in more granular unit
307c6f728728 MIPS: Fix assembly error from MIPSr2 code used within MIPS_ISA_ARCH_LEVEL
7be773a0288e scsi: ufs: Fix interrupt error message for shared interrupts
e3c97ba4a69e soc/tegra: pmc: Fix imbalanced clock disabling in error code path
17efa1a44c7f Linux 5.4.160
66bd28d6be90 selftests/bpf: Fix also no-alu32 strobemeta selftest
e7ea088cd030 ath10k: fix invalid dma_addr_t token assignment
20a951afb7d5 SUNRPC: Partial revert of commit 6f9f17287e78
5b7a0a4f7cbe PCI: Add PCI_EXP_DEVCTL_PAYLOAD_* macros
256a1e009b9b powerpc/powernv/prd: Unregister OPAL_MSG_PRD2 notifier during module unload
fe02d37870c9 s390/cio: make ccw_device_dma_* more robust
8a8d007bae0e s390/tape: fix timer initialization in tape_std_assign()
5ef14af16629 s390/cio: check the subchannel validity for dev_busid
b0989ae51d01 video: backlight: Drop maximum brightness override for brightness zero
66938ba12857 mm, oom: do not trigger out_of_memory from the #PF
d6648b55ed39 mm, oom: pagefault_out_of_memory: don't force global OOM for dying tasks
c6f9a5c11a91 powerpc/bpf: Emit stf barrier instruction sequences for BPF_NOSPEC
453b779d2b8f powerpc/security: Add a helper to query stf_barrier type
84b3fbfd8ed8 powerpc/bpf: Fix BPF_SUB when imm == 0x80000000
7edda4bd9eb9 powerpc/bpf: Validate branch ranges
0347c001c909 powerpc/lib: Add helper to check if offset is within conditional branch range
c4461ca7a835 ovl: fix deadlock in splice write
8d750efc8dd6 9p/net: fix missing error check in p9_check_errors
aba12bb38b10 net, neigh: Enable state migration between NUD_PERMANENT and NTF_USE
223985fa1b5f f2fs: should use GFP_NOFS for directory inodes
af73b240e09e irqchip/sifive-plic: Fixup EOI failed when masked
53014c1c4162 parisc: Fix set_fixmap() on PA1.x CPUs
645d6dfdcb0b parisc: Fix backtrace to always include init funtion names
62c4e0a3d81a ARM: 9156/1: drop cc-option fallbacks for architecture selection
61a5e446bbff ARM: 9155/1: fix early early_iounmap()
dc3357424610 selftests/net: udpgso_bench_rx: fix port argument
dd3a418ba5e6 cxgb4: fix eeprom len when diagnostics not implemented
1800c9eecd5e net/smc: fix sk_refcnt underflow on linkdown and fallback
b2d1b6624bde vsock: prevent unnecessary refcnt inc for nonblocking connect
72aca95f958e net: hns3: allow configure ETS bandwidth of all TCs
07b218db54a4 net/sched: sch_taprio: fix undefined behavior in ktime_mono_to_any
18f2809441ef bpf: sockmap, strparser, and tls are reusing qdisc_skb_cb and colliding
180a9b539cf6 arm64: pgtable: make __pte_to_phys/__phys_to_pte_val inline functions
572599cbf17a nfc: pn533: Fix double free when pn533_fill_fragment_skbs() fails
c1d5f943bbc3 llc: fix out-of-bound array index in llc_sk_dev_hash()
bdf94057aae6 perf bpf: Add missing free to bpf_event__print_bpf_prog_info()
23def86bbf71 zram: off by one in read_block_state()
d26835de40db mm/zsmalloc.c: close race window between zs_pool_dec_isolated() and zs_unregister_migration()
46d695e870c4 bonding: Fix a use-after-free problem when bond_sysfs_slave_add() failed
dce69e0a065d ACPI: PMIC: Fix intel_pmic_regs_handler() read accesses
700602b662d7 net: vlan: fix a UAF in vlan_dev_real_dev()
98e0ab88f435 net: davinci_emac: Fix interrupt pacing disable
70ecaadb49c2 xen-pciback: Fix return in pm_ctrl_init()
7f57b9bc8ee6 i2c: xlr: Fix a resource leak in the error handling path of 'xlr_i2c_probe()'
53ad06ff3b4e NFSv4: Fix a regression in nfs_set_open_stateid_locked()
c9dcb51ae473 scsi: qla2xxx: Turn off target reset during issue_lip
211f08d1ffc8 scsi: qla2xxx: Fix gnl list corruption
9b180f3c2d92 ar7: fix kernel builds for compiler test
59e97c74d159 watchdog: f71808e_wdt: fix inaccurate report in WDIOC_GETTIMEOUT
162a1cfcd5ca m68k: set a default value for MEMORY_RESERVE
9770f8c29f81 signal/sh: Use force_sig(SIGKILL) instead of do_group_exit(SIGKILL)
9e6985190f04 dmaengine: dmaengine_desc_callback_valid(): Check for `callback_result`
fd1de3590123 netfilter: nfnetlink_queue: fix OOB when mac header was cleared
15351d5e8bb4 soc: fsl: dpaa2-console: free buffer before returning from dpaa2_console_read
be832f781dc4 auxdisplay: ht16k33: Fix frame buffer device blanking
c441943075fd auxdisplay: ht16k33: Connect backlight to fbdev
1fa9803de9e3 auxdisplay: img-ascii-lcd: Fix lock-up when displaying empty string
e63507ea4369 dmaengine: at_xdmac: fix AT_XDMAC_CC_PERID() macro
04317e74745a mtd: core: don't remove debugfs directory if device is in use
59929f9a573a mtd: spi-nor: hisi-sfc: Remove excessive clk_disable_unprepare()
a83aaf15077e fs: orangefs: fix error return code of orangefs_revalidate_lookup()
c79c37c77550 NFS: Fix deadlocks in nfs_scan_commit_list()
5a893e0eab16 opp: Fix return in _opp_add_static_v2()
98ac69821650 PCI: aardvark: Fix preserving PCI_EXP_RTCTL_CRSSVE flag on emulated bridge
819925eff0c5 PCI: aardvark: Don't spam about PIO Response Status
bab1cfec7ae2 drm/plane-helper: fix uninitialized variable reference
4b48c6ede329 pnfs/flexfiles: Fix misplaced barrier in nfs4_ff_layout_prepare_ds
2b2fdb6f4892 rpmsg: Fix rpmsg_create_ept return when RPMSG config is not defined
bd48bdbfd9c4 apparmor: fix error check
a7b294764945 power: supply: bq27xxx: Fix kernel crash on IRQ handler register error
3f698d97f7c5 mips: cm: Convert to bitfield API to fix out-of-bounds access
fb7b73cd9418 powerpc/44x/fsp2: add missing of_node_put
d3dd1a057c9a HID: u2fzero: properly handle timeouts in usb_submit_urb
b216a39b3212 HID: u2fzero: clarify error check and length calculations
fae0552d83ff serial: xilinx_uartps: Fix race condition causing stuck TX
818e100c2bf4 phy: qcom-qusb2: Fix a memory leak on probe
de43e75917bc ASoC: cs42l42: Defer probe if request_threaded_irq() returns EPROBE_DEFER
f00ff5357b61 ASoC: cs42l42: Correct some register default values
baf5c1225eb2 ARM: dts: stm32: fix SAI sub nodes register range
bb74ce1feb36 staging: ks7010: select CRYPTO_HASH/CRYPTO_MICHAEL_MIC
73aaa6222ac7 RDMA/mlx4: Return missed an error if device doesn't support steering
20dfad97dbd6 scsi: csiostor: Uninitialized data in csio_ln_vnp_read_cbfn()
5ead6f4feaa7 power: supply: rt5033_battery: Change voltage values to µV
fdbe8e8a08bf usb: gadget: hid: fix error code in do_config()
15355466cded serial: 8250_dw: Drop wrong use of ACPI_PTR()
d8241e7a2144 video: fbdev: chipsfb: use memset_io() instead of memset()
e7df004eb14e clk: at91: check pmc node status before registering syscore ops
44a2dcd146dc memory: fsl_ifc: fix leak of irq and nand_irq in fsl_ifc_ctrl_probe
03fe35ce9a0e soc/tegra: Fix an error handling path in tegra_powergate_power_up()
543d85602f9c arm: dts: omap3-gta04a4: accelerometer irq fix
7cf7d9b83d79 ALSA: hda: Reduce udelay() at SKL+ position reporting
d1cf71d79e00 JFS: fix memleak in jfs_mount
56911ee5375f MIPS: loongson64: make CPU_LOONGSON64 depends on MIPS_FP_SUPPORT
ee49b6598cfb scsi: dc395: Fix error case unwinding
dd49dee254db ARM: dts: at91: tse850: the emac<->phy interface is rmii
1df7102f265b arm64: dts: meson-g12a: Fix the pwm regulator supply properties
681c58f34434 RDMA/bnxt_re: Fix query SRQ failure
50eca29537b0 ARM: dts: qcom: msm8974: Add xo_board reference clock to DSI0 PHY
863e71a3afb7 arm64: dts: rockchip: Fix GPU register width for RK3328
6694960195b7 ARM: s3c: irq-s3c24xx: Fix return value check for s3c24xx_init_intc()
d27580c1b027 clk: mvebu: ap-cpu-clk: Fix a memory leak in error handling paths
9212ebb1c6d8 RDMA/rxe: Fix wrong port_cap_flags
cf234bc5fbd8 ibmvnic: Process crqs after enabling interrupts
bc4061648176 ibmvnic: don't stop queue in xmit
a91c8ee2ed84 udp6: allow SO_MARK ctrl msg to affect routing
9ff14503f498 selftests/bpf: Fix fclose/pclose mismatch in test_progs
af51aa2b8586 crypto: pcrypt - Delay write to padata->info
9be9cb2a2be4 net: phylink: avoid mvneta warning when setting pause parameters
077410c7907c net: amd-xgbe: Toggle PLL settings during rate change
63a3b1af0474 drm/amdgpu/gmc6: fix DMA mask from 44 to 40 bits
9ca0d107428b wcn36xx: add proper DMA memory barriers in rx path
a3256ae45b0d libertas: Fix possible memory leak in probe and disconnect
427583b93d5a libertas_tf: Fix possible memory leak in probe and disconnect
2339ff4162a6 KVM: s390: Fix handle_sske page fault handling
3f3b4054e214 samples/kretprobes: Fix return value if register_kretprobe() failed
9435b2f9c006 tcp: don't free a FIN sk_buff in tcp_remove_empty_skb()
a8226599cbab irq: mips: avoid nested irq_enter()
ae5a24464872 s390/gmap: don't unconditionally call pte_unmap_unlock() in __gmap_zap()
8fb436d146c7 libbpf: Fix BTF data layout checks and allow empty BTF
03a818c09677 smackfs: use netlbl_cfg_cipsov4_del() for deleting cipso_v4_doi
12ccb5737925 drm/msm: Fix potential NULL dereference in DPU SSPP
dc18f0806297 clocksource/drivers/timer-ti-dm: Select TIMER_OF
c523474f2a45 PM: hibernate: fix sparse warnings
0d22f55014d2 nvme-rdma: fix error code in nvme_rdma_setup_ctrl
67ba6c8e715f phy: micrel: ksz8041nl: do not use power down mode
ae213c059a8b mwifiex: Send DELBA requests according to spec
3a781e213164 rsi: stop thread firstly in rsi_91x_init() error handling
ad4cd0130757 mt76: mt76x02: fix endianness warnings in mt76x02_mac.c
bdbc9311f10f platform/x86: thinkpad_acpi: Fix bitwise vs. logical warning
3446e5ecdf91 block: ataflop: fix breakage introduced at blk-mq refactoring
2918a29fc8ba mmc: mxs-mmc: disable regulator on error and in the remove function
b631c603b5fb net: stream: don't purge sk_error_queue in sk_stream_kill_queues()
f27fbff86280 drm/msm: uninitialized variable in msm_gem_import()
32ac072c24b5 ath10k: fix max antenna gain unit
218fb43ffff0 hwmon: (pmbus/lm25066) Let compiler determine outer dimension of lm25066_coeff
8384c4a7bcb3 hwmon: Fix possible memleak in __hwmon_device_register()
f7fd072039d6 net, neigh: Fix NTF_EXT_LEARNED in combination with NTF_USE
9498f5272a44 memstick: jmb38x_ms: use appropriate free function in jmb38x_ms_alloc_host()
5f462b38ce7a memstick: avoid out-of-range warning
3a7525d5d7bf mmc: sdhci-omap: Fix NULL pointer exception if regulator is not configured
dc73f7cae11d b43: fix a lower bounds test
1b6365fdae77 b43legacy: fix a lower bounds test
c51ac7fd0256 hwrng: mtk - Force runtime pm ops for sleep ops
52d2cdab5288 crypto: qat - disregard spurious PFVF interrupts
4d7881430ffb crypto: qat - detect PFVF collision after ACK
a3d3f9c5dca3 media: dvb-frontends: mn88443x: Handle errors of clk_prepare_enable()
73dd601bec0d netfilter: nft_dynset: relax superfluous check on set updates
62f6260f7065 EDAC/amd64: Handle three rank interleaving mode
f399e650c095 ath9k: Fix potential interrupt storm on queue reset
843ff688eb83 media: em28xx: Don't use ops->suspend if it is NULL
e577924b7021 cpuidle: Fix kobject memory leaks in error paths
18fdbdbecf72 crypto: ecc - fix CRYPTO_DEFAULT_RNG dependency
a993159a2ad0 kprobes: Do not use local variable when creating debugfs file
71411bd79e24 media: cx23885: Fix snd_card_free call on null card pointer
1c2c8030e7eb media: tm6000: Avoid card name truncation
61266f852fb5 media: si470x: Avoid card name truncation
4e65b9ec2158 media: radio-wl1273: Avoid card name truncation
8eeec127d5cf media: mtk-vpu: Fix a resource leak in the error handling path of 'mtk_vpu_probe()'
2b9ae7bac92e media: TDA1997x: handle short reads of hdmi info frame.
23b65152a069 media: dvb-usb: fix ununit-value in az6027_rc_query
e2b2d221a446 media: cxd2880-spi: Fix a null pointer dereference on error handling path
f46da0c6af3a media: em28xx: add missing em28xx_close_extension
14f3d77c770d drm/amdgpu: fix warning for overflow check
465dc8a1b1c1 ath10k: Fix missing frame timestamp for beacon/probe-resp
7c12c2fe4568 net: dsa: rtl8366rb: Fix off-by-one bug
674637270edd rxrpc: Fix _usecs_to_jiffies() by using usecs_to_jiffies()
d4cd7a167c87 crypto: caam - disable pkc for non-E SoCs
555fe5734d39 Bluetooth: btmtkuart: fix a memleak in mtk_hci_wmt_sync
8c68d12f1a37 wilc1000: fix possible memory leak in cfg_scan_result()
1713b856345d cgroup: Make rebind_subsystems() disable v2 controllers all at once
bd76ec43f14e net: net_namespace: Fix undefined member in key_remove_domain()
3a37742128ea virtio-gpu: fix possible memory allocation failure
606c95078a4e drm/v3d: fix wait for TMU write combiner flush
6a93d8ebb8aa rcu: Fix existing exp request check in sync_sched_exp_online_cleanup()
6237a1685c28 Bluetooth: fix init and cleanup of sco_conn.timeout_work
28c1d965622f selftests/bpf: Fix strobemeta selftest regression
f2c04d46c8de netfilter: conntrack: set on IPS_ASSURED if flows enters internal stream state
0c2acfede5ac parisc/kgdb: add kgdb_roundup() to make kgdb work with idle polling
cbe28724277c parisc/unwind: fix unwinder when CONFIG_64BIT is enabled
a9a411adcac8 task_stack: Fix end_of_stack() for architectures with upwards-growing stack
c06cf3b1d049 parisc: fix warning in flush_tlb_all
732441923321 x86/hyperv: Protect set_hv_tscchange_cb() against getting preempted
ad67a7e2ab13 spi: bcm-qspi: Fix missing clk_disable_unprepare() on error in bcm_qspi_probe()
a15fc58933aa btrfs: do not take the uuid_mutex in btrfs_rm_device
aba1db41dde7 net: annotate data-race in neigh_output()
2f78cb7eccb6 vrf: run conntrack only in context of lower/physdev for locally generated packets
5919f02e185b ARM: 9136/1: ARMv7-M uses BE-8, not BE-32
d99f320a1b7e gre/sit: Don't generate link-local addr if addr_gen_mode is IN6_ADDR_GEN_MODE_NONE
9929b3db46c9 ARM: clang: Do not rely on lr register for stacktrace
681a426e6ba4 smackfs: use __GFP_NOFAIL for smk_cipso_doi()
4752a9c3a079 iwlwifi: mvm: disable RX-diversity in powersave
41e583edb1d2 selftests: kvm: fix mismatched fclose() after popen()
4411d0d8df2b PM: hibernate: Get block device exclusively in swsusp_check()
a528d3aac3ef nvme: drop scan_lock and always kick requeue list when removing namespaces
209c39b3f5e9 nvmet-tcp: fix use-after-free when a port is removed
81d11e40fdbb nvmet: fix use-after-free when a port is removed
1ec1ca2be9c6 block: remove inaccurate requeue check
bfde056402c7 mwl8k: Fix use-after-free in mwl8k_fw_state_machine()
e4af3e42ba1e tracing/cfi: Fix cmp_entries_* functions signature mismatch
caeb6bae7553 workqueue: make sysfs of unbound kworker cpumask more clever
58b4e0c075d5 lib/xz: Validate the value before assigning it to an enum variable
8cdab20660f0 lib/xz: Avoid overlapping memcpy() with invalid input with in-place decompression
eb8f087201b5 memstick: r592: Fix a UAF bug when removing the driver
2226ad031436 leaking_addresses: Always print a trailing newline
63c3c7b699d2 ACPI: battery: Accept charges over the design capacity as full
2efb81b22d2d iov_iter: Fix iov_iter_get_pages{,_alloc} page fault return value
d5fb057f2364 ath: dfs_pattern_detector: Fix possible null-pointer dereference in channel_detector_create()
e2c27194fcd9 tracefs: Have tracefs directories not set OTH permission bits by default
ace6e7fe9645 net-sysfs: try not to restart the syscall if it will fail eventually
d8d1d3540561 media: usb: dvd-usb: fix uninit-value bug in dibusb_read_eeprom_byte()
382e7b6458e4 media: ipu3-imgu: VIDIOC_QUERYCAP: Fix bus_info
e5f9be486976 media: ipu3-imgu: imgu_fmt: Handle properly try
cdf338e1dbf1 ACPICA: Avoid evaluating methods too early during system resume
9ff00d0b1d35 ipmi: Disable some operations during a panic
4bba26f89e66 media: rcar-csi2: Add checking to rcsi2_start_receiver()
c08a655ed938 brcmfmac: Add DMI nvram filename quirk for Cyberbook T116 tablet
f64551db5299 ia64: don't do IA64_CMPXCHG_DEBUG without CONFIG_PRINTK
31b784864736 media: mceusb: return without resubmitting URB in case of -EPROTO error.
e419469adfd4 media: imx: set a media_device bus_info string
b2b2f9178250 media: s5p-mfc: Add checking to s5p_mfc_probe().
6b8ab552e24c media: s5p-mfc: fix possible null-pointer dereference in s5p_mfc_probe()
bc4af8c782eb media: uvcvideo: Set unique vdev name based in type
7a646855d6a0 media: uvcvideo: Return -EIO for control errors
ab7fca0eaefb media: uvcvideo: Set capability in s_param
bff0833e2b7a media: stm32: Potential NULL pointer dereference in dcmi_irq_thread()
cede36511c3b media: netup_unidvb: handle interrupt properly according to the firmware
3fe3d04354ae media: mt9p031: Fix corrupted frame after restarting stream
08743f9c4801 ath10k: high latency fixes for beacon buffer
fadb4cd750f4 mwifiex: Properly initialize private structure on interface type changes
7d3e6635c22a mwifiex: Run SET_BSS_MODE when changing from P2P to STATION vif-type
480c240ab6df x86: Increase exception stack sizes
91b9c23b6d5b smackfs: Fix use-after-free in netlbl_catmap_walk()
31df731c8705 net: sched: update default qdisc visibility after Tx queue cnt changes
a82f379378ab locking/lockdep: Avoid RCU-induced noinstr fail
f14eca60bf23 MIPS: lantiq: dma: reset correct number of channel
ca07aff2575d MIPS: lantiq: dma: add small delay after reset
e5ea3dca9497 platform/x86: wmi: do not fail if disabling fails
b57df4d6fc13 drm/panel-orientation-quirks: add Valve Steam Deck
67bd269a84ce Bluetooth: fix use-after-free error in lock_sock_nested()
d416020f1a9c Bluetooth: sco: Fix lock_sock() blockage by memcpy_from_msg()
a52bd11b2410 drm: panel-orientation-quirks: Add quirk for the Samsung Galaxy Book 10.6
e5ca76568a61 drm: panel-orientation-quirks: Add quirk for KD Kurio Smart C15200 2-in-1
c19cabfa5537 drm: panel-orientation-quirks: Update the Lenovo Ideapad D330 quirk (v2)
46a25b7a25a0 dma-buf: WARN on dmabuf release with pending attachments
1bee9e59c67b USB: chipidea: fix interrupt deadlock
8a643c0f95e8 USB: iowarrior: fix control-message timeouts
32858116748e USB: serial: keyspan: fix memleak on probe errors
8ce0bc6962df iio: dac: ad5446: Fix ad5622_write() return value
f01e16d32495 pinctrl: core: fix possible memory leak in pinctrl_enable()
270541cbc056 quota: correct error number in free_dqentry()
10b808307d37 quota: check block number when reading the block in quota file
a509a515f378 PCI: aardvark: Read all 16-bits from PCIE_MSI_PAYLOAD_REG
0ea58b9bb9cf PCI: aardvark: Fix return value of MSI domain .alloc() method
ee9cdca4d61b PCI: aardvark: Fix reporting Data Link Layer Link Active
6f99c7a51e0a PCI: aardvark: Do not unmask unused interrupts
d964886327ba PCI: aardvark: Fix checking for link up via LTSSM state
e0269c0c81b8 PCI: aardvark: Do not clear status bits of masked interrupts
50b0ce94fbcc PCI: pci-bridge-emul: Fix emulation of W1C bits
3d995568c9bb xen/balloon: add late_initcall_sync() for initial ballooning done
3f6255a91bf3 ALSA: mixer: fix deadlock in snd_mixer_oss_set_volume
6225a31b2eb6 ALSA: mixer: oss: Fix racy access to slots
e9adf72bdbd5 serial: core: Fix initializing and restoring termios speed
b535b634645f powerpc/85xx: Fix oops when mpc85xx_smp_guts_ids node cannot be found
bfefc5d6f953 can: j1939: j1939_can_recv(): ignore messages with invalid source address
94a3f521e3b6 can: j1939: j1939_tp_cmd_recv(): ignore abort message in the BAM transport
8e61c799c81e KVM: nVMX: Query current VMCS when determining if MSR bitmaps are in use
654a8248169e power: supply: max17042_battery: use VFSOC for capacity when no rsns
11129762e31a power: supply: max17042_battery: Prevent int underflow in set_soc_threshold
625c3ed247e1 signal/mips: Update (_save|_restore)_fp_context to fail with -EFAULT
ec5ef8d4d795 signal: Remove the bogus sigkill_pending in ptrace_stop
28c70d50363d RDMA/qedr: Fix NULL deref for query_qp on the GSI QP
91a29609bd6f rsi: Fix module dev_oper_mode parameter description
9defe9b1ab34 rsi: fix rate mask set leading to P2P failure
2f1f06be3eb5 rsi: fix key enabled check causing unwanted encryption for vap_id > 0
1fa1da8a60ff rsi: fix occasional initialisation failure with BT coex
398e7e5add0c wcn36xx: handle connection loss indication
4a67355383f3 libata: fix checking of DMA state
6f2f91b9df15 mwifiex: Read a PCI register after writing the TX ring write pointer
3991cdc40fc1 wcn36xx: Fix HT40 capability for 2Ghz band
301d33c95441 evm: mark evm_fixmode as __ro_after_init
e1f71a32899a rtl8187: fix control-message timeouts
76d2ce7ca9dc PCI: Mark Atheros QCA6174 to avoid bus reset
3110371c7af6 ath10k: fix division by zero in send path
2b94d10056f9 ath10k: fix control-message timeout
cfbe74d8b131 ath6kl: fix control-message timeout
1a2fe1c3d87f ath6kl: fix division by zero in send path
78ebff828a33 mwifiex: fix division by zero in fw download path
08501eb9ff6a EDAC/sb_edac: Fix top-of-high-memory value for Broadwell/Haswell
a147922924ab regulator: dt-bindings: samsung,s5m8767: correct s5m8767,pmic-buck-default-dvs-idx property
c9e5a005960b regulator: s5m8767: do not use reset value as DVS voltage if GPIO DVS is disabled
3baa5886d128 hwmon: (pmbus/lm25066) Add offset coefficients
98bea923793f ia64: kprobes: Fix to pass correct trampoline address to the handler
ddb54bf3b764 btrfs: call btrfs_check_rw_degradable only if there is a missing device
5223324ed1a9 btrfs: fix lost error handling when replaying directory deletes
c25984fa182f btrfs: clear MISSING device status bit in btrfs_close_one_device
87a87c82f7f3 net/smc: Correct spelling mistake to TCPF_SYN_RECV
cc14499b9dde nfp: bpf: relax prog rejection for mtu check through max_pkt_offset
a62d43084165 vmxnet3: do not stop tx queues after netif_device_detach()
17dcecf20ce7 r8169: Add device 10ec:8162 to driver r8169
e84b38e57821 nvmet-tcp: fix header digest verification
2804181e1b91 drm: panel-orientation-quirks: Add quirk for GPD Win3
7273488fd373 watchdog: Fix OMAP watchdog early handling
5ffdddcf28a1 net: multicast: calculate csum of looped-back and forwarded packets
9420e2496d45 spi: spl022: fix Microwire full duplex mode
1a667bc32918 nvmet-tcp: fix a memory leak when releasing a queue
2f3860ba601a xen/netfront: stop tx queues during live migration
de649ec7ad84 bpf: Prevent increasing bpf_jit_limit above max
df8665c3983e bpf: Define bpf_jit_alloc_exec_limit for arm64 JIT
8dd688ba675a drm: panel-orientation-quirks: Add quirk for Aya Neo 2021
c4282bb80519 mmc: winbond: don't build on M68K
05f0a97e2ff7 reset: socfpga: add empty driver allowing consumers to probe
dfa8fb782b52 ARM: dts: sun7i: A20-olinuxino-lime2: Fix ethernet phy-mode
f09014e8bea8 hyperv/vmbus: include linux/bitops.h
054fe50d2654 sfc: Don't use netif_info before net_device setup
82005afbb30b cavium: Fix return values of the probe function
9f5fd5aab85f scsi: qla2xxx: Fix unmap of already freed sgl
96183337e97d scsi: qla2xxx: Return -ENOMEM if kzalloc() fails
8e3a0d28edb6 cavium: Return negative value when pci_alloc_irq_vectors() fails
58608e80d627 x86/irq: Ensure PI wakeup handler is unregistered before module unload
7252cb96e410 x86/cpu: Fix migration safety with X86_BUG_NULL_SEL
e3d4ba338b98 x86/sme: Use #define USE_EARLY_PGTABLE_L5 in mem_encrypt_identity.c
ccc4e5e60b41 fuse: fix page stealing
9505d4872188 ALSA: timer: Unconditionally unlink slave instances, too
2c6446168f07 ALSA: timer: Fix use-after-free problem
246c6a1fe356 ALSA: synth: missing check for possible NULL after the call to kstrdup
ce9f7535ec26 ALSA: usb-audio: Add registration quirk for JBL Quantum 400
7da6f4c5c21c ALSA: line6: fix control and interrupt message timeouts
4a12e624e597 ALSA: 6fire: fix control and bulk message timeouts
ab3f823af278 ALSA: ua101: fix division by zero at probe
a3bb6e0db72b ALSA: hda/realtek: Add quirk for HP EliteBook 840 G7 mute LED
40243342d297 ALSA: hda/realtek: Add quirk for ASUS UX550VE
8af6ade7ac5e ALSA: hda/realtek: Add a quirk for Acer Spin SP513-54N
809416fe0a7a ALSA: hda/realtek: Add quirk for Clevo PC70HS
638b53d67ffc media: v4l2-ioctl: Fix check_ext_ctrls
8c11269bd619 media: ir-kbd-i2c: improve responsiveness of hauppauge zilog receivers
bbd62d2fca94 media: ite-cir: IR receiver stop working after receive overflow
eef6cb3d3c92 crypto: s5p-sss - Add error handling in s5p_aes_probe()
d7a5d872b414 firmware/psci: fix application of sizeof to pointer
18f0fb57a9fe tpm: Check for integer overflow in tpm2_map_response_body()
f38f3da360a6 parisc: Fix ptrace check on syscall return
acbc2a08ea7c mmc: dw_mmc: Dont wait for DRTO on Write RSP error
5ee76475f82a scsi: qla2xxx: Fix use after free in eh_abort path
cc5b13948838 scsi: qla2xxx: Fix kernel crash when accessing port_speed sysfs file
617d2fd48da5 ocfs2: fix data corruption on truncate
c20eb9551c52 libata: fix read log timeout value
69c2199f49fb Input: i8042 - Add quirk for Fujitsu Lifebook T725
17ec1c6b45a7 Input: elantench - fix misreporting trackpoint coordinates
ce4bec0a54a4 Input: iforce - fix control-message timeout
db39f49ee7d5 binder: use cred instead of task for getsecid
fc9c470cd519 binder: use cred instead of task for selinux checks
28a1e470b000 binder: use euid from cred instead of using task
3e87c4996de1 usb: xhci: Enable runtime-pm by default on AMD Yellow Carp platform
3fa7efd1fab1 xhci: Fix USB 3.1 enumeration issues by increasing roothub power-on-good delay

(From OE-Core rev: 638171722cc6bfde01bf71a83af1a7c104ec54aa)

Signed-off-by: Bruce Ashfield <bruce.ashfield@gmail.com>
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-30 16:59:16 +00:00
Bruce Ashfield
4750894a6a linux-yocto/5.4: update to v5.4.159
Updating linux-yocto/5.4 to the latest korg -stable release that comprises
the following commits:

    5915b0ea6746 Linux 5.4.159
    abc49cc45d0a rsi: fix control-message timeout
    64e6632ab4c1 media: staging/intel-ipu3: css: Fix wrong size comparison imgu_css_fw_init
    6c382b63658e staging: rtl8192u: fix control-message timeouts
    f66258cb60e4 staging: r8712u: fix control-message timeout
    88a252ff782c comedi: vmk80xx: fix bulk and interrupt message timeouts
    1ae4715121a5 comedi: vmk80xx: fix bulk-buffer overflow
    199acd8c110e comedi: vmk80xx: fix transfer-buffer overflows
    b0156b7c9649 comedi: ni_usb6501: fix NULL-deref in command paths
    3efb7af8ac43 comedi: dt9812: fix DMA buffers on stack
    6e80e9314f8b isofs: Fix out of bound access for corrupted isofs image
    adc56dbfc4aa printk/console: Allow to disable console output by using console="" or console=null
    589ac131b3ab binder: don't detect sender/target during buffer cleanup
    b60e89b63eb9 usb-storage: Add compatibility quirk flags for iODD 2531/2541
    5c3eba290479 usb: musb: Balance list entry in musb_gadget_queue
    161571745de1 usb: gadget: Mark USB_FSL_QE broken on 64-bit
    d6013265a779 usb: ehci: handshake CMD_RUN instead of STS_HALT
    6d000e1c1625 Revert "x86/kvm: fix vcpu-id indexed array sizes"

(From OE-Core rev: 9c37c738a645b472175b93431deb47b47a1442e7)

Signed-off-by: Bruce Ashfield <bruce.ashfield@gmail.com>
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-30 16:59:16 +00:00
Mingli Yu
3e9902aa6c bootchart2: remove wait_boot logic
When boot with "init=/sbin/bootchartd" as below:
 # runqemu qemux86 bootparams="init=/sbin/bootchartd"

There are two bootchartd process after boot [1].
 # ps -ef | grep bootchart
root       101     1  0 03:27 ?        00:00:00 /bin/sh /sbin/bootchartd
root       103   101  8 03:27 ?        00:00:02 /lib64/bootchart/bootchart-collector 50
root       106     1  0 03:27 ?        00:00:00 /bin/sh /sbin/bootchartd
root       792   106  0 03:27 ?        00:00:00 /lib64/bootchart/bootchart-collector --usleep 1000000
root       794   725  0 03:27 ttyS0    00:00:00 grep bootchart

 # /sbin/bootchartd stop
[bootchart] bootchart-collector started as pid 596 with 2 args:
[bootchart] '--dump'
[bootchart] '/tmp/bootchart.3lXpVDAq3v'
[bootchart] Extracting profile data from pid 204
[bootchart] map 0xbed9a000 -> 0xbedbb000 size: 132k from 'bed9a000' 'bedbb000'
[bootchart] read 135168 bytes of 135168
[bootchart] reading 150 chunks (of 150) ...
[bootchart] wrote 18760 kbB
[bootchart] bootchart-collector pid: 596 unmounted proc / clean exit

But there still one process exist after the above stop command finish.
 # ps -ef | grep bootchartd
root 202 1 0 09:09 ? 00:00:00 /bin/sh /sbin/bootchartd
root 629 516 0 09:10 ? 00:00:00 grep bootchartd

Remove the wait_boot which used to wait the boot process to finish to
make sure only one bootchartd process and meanwhile we don't need the
wait_boot logic because we either use "/sbin/bootchartd stop" to stop
the bootchartd manually or install package bootchartd-stop-initscript
altogether with bootchart2 to stop bootchartd automatically after boot.

After patch:
 # ps -ef | grep bootchart
 root       101     1  0 03:36 ?        00:00:00 /bin/sh /sbin/bootchartd
 root       103   101  6 03:36 ?        00:00:04 /lib64/bootchart/bootchart-collector 50
 root       596   592  0 03:37 ttyS0    00:00:00 grep bootchart

[1] https://github.com/xrmx/bootchart/issues/94

(From OE-Core rev: 058d6f5e6186c136c834fdb1303e28c6b9402ccd)

Signed-off-by: Mingli Yu <mingli.yu@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit cc34e3bdedc045baf97ebc2258295d9433cb332e)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-30 16:59:16 +00:00
Ernst Sjöstrand
11880c6987 dropbear: Fix CVE-2020-36254
Dropbear shares a lot of code with other SSH implementations, so this is
a port of CVE-2018-20685 to dropbear by the dropbear developers.

Reference:
8f8a3dff70

CVE: CVE-2020-36254
Upstream-Status: Backport

(From OE-Core rev: 10712b736d7cbde897c5aab30e969c04740dce34)

Signed-off-by: Ernst Sjöstrand <ernst.sjostrand@verisure.com>
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-30 16:59:16 +00:00
Minjae Kim
1e13a3f914 inetutils: fix CVE-2021-40491
The ftp client in GNU Inetutils before 2.2 does not validate addresses
returned by PASV/LSPV responses to make sure they match the server
address. This is similar to CVE-2020-8284 for curl.

References:
https://nvd.nist.gov/vuln/detail/CVE-2021-40491

Patch from:
https://git.savannah.gnu.org/cgit/inetutils.git/commit/?id=58cb043b190fd04effdaea7c9403416b436e50dd

(From OE-Core rev: 22de3b937dda28a6aa4113549f32f36d67b6751d)

Signed-off-by: Minjae Kim <flowergom@gmail.com>
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-30 16:59:16 +00:00
Minjae Kim
9564dc31cb vim: fix CVE-2021-4069
Use After Free in vim/vim

Upstream-Status: Backport [e031fe90cf]
CVE: CVE-2021-4069
(From OE-Core rev: 9db3b4ac4018bcaedb995bc77a9e675c2bca468f)

Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-30 16:59:16 +00:00
sana kazi
bd07080415 openssh: Whitelist CVE-2016-20012
Whitelist CVE-2016-20012 as the upstream OpenSSH developers
see this as an important security feature and do not intend to
'fix' it.
Link: https://security-tracker.debian.org/tracker/CVE-2016-20012
https://ubuntu.com/security/CVE-2016-20012

(From OE-Core rev: 79c677e994399611819e1e382b3e1b0be16eb6e1)

Signed-off-by: Sana Kazi <Sana.Kazi@kpit.com>
Signed-off-by: Sana Kazi <sanakazisk19@gmail.com>
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-30 16:59:16 +00:00
sana kazi
f4a6761f47 openssh: Fix CVE-2021-41617
Add patch to fix CVE-2021-41617
Link: https://bugzilla.suse.com/attachment.cgi?id=854015

(From OE-Core rev: a4e272700e18ca7e86e24ce4e24031ce7745c87b)

Signed-off-by: Sana Kazi <Sana.Kazi@kpit.com>
Signed-off-by: Sana Kazi <sanakazisk19@gmail.com>
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-30 16:59:16 +00:00
Marta Rybczynska
30231b2354 bluez: fix CVE-2021-0129
Improper access control in BlueZ may allow an authenticated user to
potentially enable information disclosure via adjacent access.

This issue can be fixed in the kernel, in BlueZ or both. This patch
fixes it on the BlueZ side, so that the configuration no longer
depends on the kernel fix.

https://nvd.nist.gov/vuln/detail/CVE-2021-012

(From OE-Core rev: 573ff24c5ba7836b4dd7f95b6e7c7244b80f9d00)

Signed-off-by: Marta Rybczynska <marta.rybczynska@huawei.com>
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-30 16:59:16 +00:00
Richard Purdie
795339092f build-appliance-image: Update to dunfell head revision
(From OE-Core rev: 90a07178ea26be453d101c2e8b33d3a0f437635d)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-14 22:49:36 +00:00
Steve Sakoman
38793eecda selftest: skip virgl test on centos 8 entirely
With the sdl frontend, qemu isn't able to even boot fully,
so let's skip the test early.

(From OE-Core rev: 74bb94a7d249b5c53f3e1d15688a3a323fc8e828)

Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-14 22:49:22 +00:00
Stefan Herbrechtsmeier
25e51ec82a selftest/devtool: Check branch in git fetch
The commit 'meta/scripts: Manual git url branch additions (dc53fe75cc)'
forget the url branch= parameter in the devtool git fetch test.

(From OE-Core rev: 7d26bdcfef6473f64c73e8507bce334e010c3cad)

Signed-off-by: Stefan Herbrechtsmeier <stefan.herbrechtsmeier@weidmueller.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 1419168a58a5caf99e24ada08c9ab639344a78b4)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-14 22:49:22 +00:00
Stefan Herbrechtsmeier
963a35872c recipetool: Set master branch only as fallback
The commit 'meta/scripts: Manual git url branch additions (dc53fe75cc)'
sets the branch= parameter too early to master and thereby breaks the
-B/--srcbranch option.

ERROR: branch= parameter and -B/--srcbranch option cannot both be specified - use one or the other

(From OE-Core rev: 2bc6deb34aee7542d7086c24b166083c562a6a01)

Signed-off-by: Stefan Herbrechtsmeier <stefan.herbrechtsmeier@weidmueller.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 34ece8030e7a6a100b5e3e7b94e6c786c0e199a6)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-14 22:49:22 +00:00
Ross Burton
75dde71fba runqemu: check the qemu PID has been set before kill()ing it
If runqemu is killed, check that we have a valid PID for the qemu before
sending a kill() to it.

[ YOCTO #14651 ]

(From OE-Core rev: 7f95eb486a2d07cf0c821d5301fd670de34fe2d1)

Signed-off-by: Ross Burton <ross.burton@arm.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 0f3afbd3a6a6bef668612f818517df7543c0a683)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-14 22:49:22 +00:00
Andrey Zhizhikin
9bb220ccc1 lttng-modules: do not search in non-existing folder during install
When CONFIG_TRACEPOINTS is not enabled in kernel config - module
compilation is skipped, which causes the ${D}/${nonarch_base_libdir} not
to be created.

This fails later in do_install:append() due to the fact that find
command in executed for non-existing folder.

Check for folder existence before find command in executed.

(From OE-Core rev: db8a8b53f440f37731c7c5db9561ac46ef59d891)

Signed-off-by: Andrey Zhizhikin <andrey.z@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit de0aa1700ed4e6f04b0a233eb1f6d2ac598e7ed8)
Signed-off-by: Aníbal Limón <anibal.limon@linaro.org>
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-14 22:49:22 +00:00
Markus Volk
b8623317df wic:direct.py: ignore invalid mountpoints during fstab update
wic fstab-update creates invalid entries for partitons that are not supposed to
be mounted from userspace eg u-boot partitions.

The following lines were added to fstab on a rock-pi-4:
/dev/mmcblk1p1 loader1 vfat defaults 0 0
/dev/mmcblk1p2 reserved1 vfat defaults 0 0
/dev/mmcblk1p3 reserved2 vfat defaults 0 0
/dev/mmcblk1p4 loader2 vfat defaults 0 0
/dev/mmcblk1p5 atf vfat defaults 0 0
/dev/mmcblk1p6 /boot vfat defaults 0 0

With this patch only valid entries should be added
/dev/mmcblk1p6 /boot vfat defaults 0 0

(From OE-Core rev: 3c8e50b073a1505cc3586ca51dfe1e75338feafc)

Signed-off-by: MarkusVolk <f_l_k@t-online.de>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 7aa678ce804c21dc1dc51b9be442671bc33c4041)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-14 22:49:22 +00:00
Sana Kazi
8967fcbcc4 busybox: Fix multiple security issues in awk
CVE-2021-423xx-awk.patch fixes below listed CVEs for busybox:
CVE-2021-42378, CVE-2021-42379, CVE-2021-42380, CVE-2021-42381,
CVE-2021-42382, CVE-2021-42384, CVE-2021-42385, CVE-2021-42386

(From OE-Core rev: 37a92e6d4399cdb36d24b988d77aa41b1e205a90)

Signed-off-by: Sana Kazi <Sana.Kazi@kpit.com>
Signed-off-by: Ranjitsinh Rathod <ranjitsinh.rathod@kpit.com>
Signed-off-by: Ranjitsinh Rathod <ranjitsinhrathod1991@gmail.com>
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-14 22:49:22 +00:00
Richard Purdie
22767ef398 gcc: Add CVE-2021-37322 to the list of CVEs to ignore
The CVE applies to binutils 2.26 and not to gcc so ignore there.

(From OE-Core rev: 71a6d3c31775c6b2db38e194992e0ffce637c827)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Signed-off-by: Tim Orling <tim.orling@konsulko.com>
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-14 22:49:22 +00:00
Marta Rybczynska
ec21b227cd libgcrypt: solve CVE-2021-33560 and CVE-2021-40528
This change fixes patches for two issues reported in a research
paper [1]: a side channel attack (*) and a cross-configuration
attack (**).

In this commit we add a fix for (*) that wasn't marked as a CVE
initially upstream. A fix of (**) previosly available in OE
backports is in fact fixing CVE-2021-40528, not CVE-2021-33560
as marked in the commit message.

We commit the accual fix for CVE-2021-33560 and rename the
existing fix with the correct CVE-2021-40528.

For details of the mismatch and the timeline see [2] (fix of the
documentation) and [3] (the related ticket upstream).

[1] https://eprint.iacr.org/2021/923.pdf
[2] https://dev.gnupg.org/rCb118681ebc4c9ea4b9da79b0f9541405a64f4c13
[3] https://dev.gnupg.org/T5328#149606

(From OE-Core rev: 0ce5c68933b52d2cfe9eea967d24d57ac82250c3)

Signed-off-by: Marta Rybczynska <marta.rybczynska@huawei.com>
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-14 22:49:22 +00:00
Steve Sakoman
947e5ff11c cve-extra-exclusions: add db CVEs to exclusion list
Since Oracle relicensed bdb, the open source community is slowly but surely replacing bdb with
supported and open source friendly alternatives. As a result these CVEs are unlikely to ever be fixed.

(From OE-Core rev: 15ccac9307a8a3a69ea7e9e611688dbb63df32aa)

Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 679fc70f907fb221f4541ebf30c1610e937209b7)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-14 22:49:22 +00:00
Steve Sakoman
56485d82f6 poky.conf: Bump version for 3.1.13 release
(From meta-yocto rev: fab607a8c53b419fa7109394edbf4e2e9d3c8b8a)

Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-13 23:28:51 +00:00
Michael Opdenacker
80306758c6 remove reference to BB_SETSCENE_VERIFY_FUNCTION2
No longer defined in BitBake

(From yocto-docs rev: c00596374d2c6ddd1b81e536972aa8fc807e60b9)

Signed-off-by: Michael Opdenacker <michael.opdenacker@bootlin.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-13 23:26:11 +00:00
Michael Opdenacker
bdfabf0409 available release updates
Fix reference to the latest 3.0.x version

Aligning releases.rst and sphinx-static/switchers.js
with the contents in master-next

(From yocto-docs rev: 77db6738d58ba4bdc68deb74775c00a332fcc86c)

Signed-off-by: Michael Opdenacker <michael.opdenacker@bootlin.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-13 23:26:11 +00:00
Michael Opdenacker
cf5a00721f documentation: conf.py: explicit which version of bitbake objects.inv is used
(From yocto-docs rev: e8d6b264f1093f47822ebffc117cb67656fd7e03)

Signed-off-by: Michael Opdenacker <michael.opdenacker@bootlin.com>
Reported-by: Quentin Schulz <foss@0leil.net>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-09 00:18:34 +00:00
Quentin Schulz
02bd7ece75 README.OE-Core.md: update URLs
Update URLs to what they actually redirect to.

Cc: Quentin Schulz <foss+yocto@0leil.net>
(From OE-Core rev: f788765e1b9832d0da8ec4ce49aa811115864b0e)

Signed-off-by: Quentin Schulz <quentin.schulz@theobroma-systems.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit ec2131070cae6c3933e5b08986e8245fcd9deb99)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-08 20:28:01 +00:00
Dhruva Gole
69f5804c8a scripts/checklayer/common.py: Fixed a minor grammatical error
(From OE-Core rev: eee2103640d15011cb40d719769ecb4ce42095fb)

Signed-off-by: Dhruva Gole <goledhruva@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 8ea17456ae5318ed7a3b4c8f75c8441456d8b979)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-08 20:28:01 +00:00
Eero Aaltonen
11d99fba1f cmake: FindGTest: Add target for gmock library
`googlemock` has been absorbed into the
[googletest](https://github.com/google/googletest) project and is built
and installed from the same source tree.

`googletest` has provided a CMake Config-file Package starting with
GTest 1.8.1. `find_package(GTest ...)` by default dispatches first to
CMake Find Module. Starting with CMake commit
2327b4330cce157d616ff8b611b3e77568d00351 in CMake v3.20.0 the module
dispatches onward to the Config-file Package so that the same targets
are available. In pre v3.20.0 versions of CMake however the Find Module
masks the targets provided by the upstream `GTest` package.

Update `Modules/FindGTest.cmake` to provide the same targets as the
CMake Config-file Package and backwards compatible targets and result
variables.

(From OE-Core rev: 3b05fb01ec0e51c85d8ed62618467e57be91b928)

Signed-off-by: Eero Aaltonen <eero.aaltonen@vaisala.com>
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-08 20:28:01 +00:00
Richard Purdie
746b301d37 oeqa/parselogs: Fix quoting
Fix deprecation warnings about invalid escape sequences.

(From OE-Core rev: 3f23e40581f90b6a7c5a280e049a0188b8be8d75)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 43542614395150e8fa34133ba0fc7ee90f215bcb)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-08 20:28:01 +00:00
Richard Purdie
038e25aec3 buildhistory: Fix srcrevs output
The code was assuming that the a recipe with only one srcrev wouldn't "name"
it. This isn't the case as the glibc or bzip2 recipes show, you can have
a single srcrev which is named.

We can pull the data from the fetcher and in fact we already have it, we just
need to handle the "default" case and make that code the default for all srcrev
regardless of length.

[YOCTO #14017]

(From OE-Core rev: 9a7ea10660d0efd87e8cadf866e6dbed112b7f94)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 45ae567932ba52b758eb41754453e9828d9533a1)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-08 20:28:01 +00:00
Khem Raj
1a6bf73119 libunwind: Backport a fix for -fno-common option to compile
[Khem Raj]
defaults for gcc is to use -fno-common this ensures that it keeps
building with gcc -fno-common

Fixes
src/arm/Ginit.c:60: multiple definition of `_U_dyn_info_list'; mi/.libs/dyn-info-list.o:/usr/src/debug/libunwind/1.4.0-r0/build/src/../../libunwind-1.4.0/src/mi/dyn-info-list.c:28: first defined here

[Philippe Coval]

Change and related patch ported to dunfell branch on 1.3.1 version

(From OE-Core rev: 0c12a3a3008ec1202dff3b4986029dd1a4e8f9a7)

Signed-off-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Origin: 6cd2cf6525
Signed-off-by: Philippe Coval <philippe.coval@huawei.com>
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-08 20:28:01 +00:00
Jate Sujjavanich
57b3bf09e1 dnf: Backport bugfix for upgrade
Keep installed packages in upgrade job

This prevents duplicate identical packages from being reinstalled
with each upgrade

(From OE-Core rev: 87c413d2a9554412d02dee4534febfafdbe4a4c1)

Signed-off-by: Jate Sujjavanich <jatedev@gmail.com>
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-08 20:28:01 +00:00
Jate Sujjavanich
fc34eadb56 libdnf: Backport bugfix for upgrade calc
Mark goal.upgrade with sltr as targeted

This allows a bugfix in dnf to work

(From OE-Core rev: f17edb6854985ffb1a43b8288253f9618334fc3f)

Signed-off-by: Jate Sujjavanich <jatedev@gmail.com>
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-08 20:28:01 +00:00
Steve Sakoman
652e053d0c bind: update to 9.11.35
Notes for BIND 9.11.35

Security Fixes

named failed to check the opcode of responses when performing zone refreshes,
stub zone updates, and UPDATE forwarding. This could lead to an assertion
failure under certain conditions and has been addressed by rejecting responses
whose opcode does not match the expected value. [GL #2762]

(From OE-Core rev: ede9176c53d2de5559a15f48f2a0a3a31a331d1b)

Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-08 20:28:01 +00:00
Steve Sakoman
215a1a8237 bind: update to 9.11.34
Notes for BIND 9.11.34

This maintenance release of BIND 9.11 contains no significant changes,
although some minor updates have been made (for example, to fix build
issues on Solaris 11).

(From OE-Core rev: ec9d6b2dc3e64715286bd93c789887b3ea0d4e3c)

Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-08 20:28:01 +00:00
Steve Sakoman
3a71f5c1bf bind: update to 9.11.33
Notes for BIND 9.11.33

This maintenance release of BIND 9.11 contains no significant changes,
although some minor updates have been made (for example, to eliminate
compiler warnings emitted by GCC 11).

(From OE-Core rev: ee9986b305250b5940e38c1aeac69ec0c958d923)

Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-08 20:28:01 +00:00
Ranjitsinh Rathod
643c3b7bf3 libsolv: update tag for missing CVEs
It seems like CVE-2021-33928, CVE-2021-33929, CVE-2021-33930 and
CVE-2021-33938 are pointing to same patch as CVE-2021-3200

So add CVE tag inside the patch file which is the remedy for
CVE-2021-33928, CVE-2021-33929, CVE-2021-33930 and CVE-2021-33938

Link:
https://ubuntu.com/security/CVE-2021-3200
https://ubuntu.com/security/CVE-2021-33928
https://ubuntu.com/security/CVE-2021-33929
https://ubuntu.com/security/CVE-2021-33930
https://ubuntu.com/security/CVE-2021-33938

(From OE-Core rev: 371c247a78da64fefb0daa166e90c4fdd0745eed)

Signed-off-by: Ranjitsinh Rathod <ranjitsinh.rathod@kpit.com>
Signed-off-by: Ranjitsinh Rathod <ranjitsinhrathod1991@gmail.com>
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-08 20:28:01 +00:00
Ranjitsinh Rathod
80132fb2df ncurses: Fix for CVE-2021-39537
Add patch to fix CVE-2021-39537
Link: http://cvsweb.netbsd.org/bsdweb.cgi/pkgsrc/devel/ncurses/patches/Attic/patch-ncurses_tinfo_captoinfo.c?rev=1.1&content-type=text/x-cvsweb-markup

(From OE-Core rev: abe9e7aec3b3363927eed014775145c55710fa07)

Signed-off-by: Ranjitsinh Rathod <ranjitsinh.rathod@kpit.com>
Signed-off-by: Ranjitsinh Rathod <ranjitsinhrathod1991@gmail.com>
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-08 20:28:01 +00:00
Ross Burton
0e5c82c4c9 vim: fix CVE-2021-3968 and CVE-2021-3973
Backport a fix for -3972, and whitelist -3968: it isn't valid as it
fixes a bug which was introduced after 8.2.

(From OE-Core rev: ba1ae7dcd2eeb57a6e288449a26a6121c6ccac5c)

Signed-off-by: Ross Burton <ross.burton@arm.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit bec5caadfb53638748d8c41ce7230c2bf7808d27)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-08 20:28:01 +00:00
Pavel Zhukov
15d764e697 busybox: Fix for CVE-2021-42376
A NULL pointer dereference in Busybox's hush applet leads to denial of service
when processing a crafted shell command, due to missing validation after
a \x03 delimiter character.
This may be used for DoS under very rare conditions of filtered command input.

Reference: https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2021-42376

(From OE-Core rev: 58e49c94d5305875188110aecdefe77c0afdfcb7)

Signed-off-by: Pavel Zhukov <pavel.zhukov@huawei.com>
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-08 20:28:01 +00:00
Pavel Zhukov
1f2cf291e7 busybox: Fix for CVE-2021-42374
An out-of-bounds heap read in unlzma leads to information leak and
denial of service when crafted LZMA-compressed input is decompressed.
This can be triggered by any applet/format that internally supports
LZMA compression.

Reference: https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2021-42374

(From OE-Core rev: 297719989ebe8ce7d50e3991cba3e268938690ce)

Signed-off-by: Pavel Zhukov <pavel.zhukov@huawei.com>
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-08 20:28:01 +00:00
Neetika Singh
090075eb3a glib-2.0: Add security fixes
Add patches for below CVE issues:
CVE-2021-27218
CVE-2021-27219
CVE-2021-28153
Link: https://mirrors.ocf.berkeley.edu/ubuntu/pool/main/g/glib2.0/glib2.0_2.64.6-1~ubuntu20.04.3.debian.tar.xz
Also, add regression patchs for CVE-2021-27219.
CVE-2021-27219-reg1-3.patch is not relevant for glib2.0 v2.64

(From OE-Core rev: 4fb30dd540b1fb56a14237e21e84b22f8b515dc5)

Signed-off-by: Neetika.Singh <Neetika.Singh@kpit.com>
Signed-off-by: Ranjitsinh Rathod <ranjitsinh.rathod@kpit.com>
Signed-off-by: Ranjitsinh Rathod <ranjitsinhrathod1991@gmail.com>
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-08 20:28:00 +00:00
Richard Purdie
d875c5e57b bitbake: bblayers/action: When adding layers, catch BBHandledException
When adding a layer, parse error can occur, raising BBHandledException.
Catch this and error, aborting the layer add to meet user expectations.

[YOCTO #14054]

(Bitbake rev: f18b65d0b9a6b983d53bde491e1bf2ca56949444)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit ceddb5b3d229b83c172656053cd29aeb521fcce0)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-05 12:36:55 +00:00
Richard Purdie
f18d2289d0 bitbake: cooker: Ensure reparsing is handled correctly
>From tinfoil, if you edit bblayers.conf and break it, then call
parseConfiguration (e.g. by adding a bad layer with bitbake-layers),
the system doens't show any parse error yet it should.

Add in a call to the updateCache function so that things really
are reparsed when requested.

Partially fixes [YOCTO #14054]

(Bitbake rev: a6ad6eaf4cddbe45077d1e6cb667f71602b8a49d)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit e655f9361b9c3b77906b8e06b5cc76bc5180640e)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-05 12:36:55 +00:00
Ross Burton
de97f0eccc openssh: remove redundant BSD license
The license statement already includes BSD-2-Clause and BSD-3-Clause, so
remove the redundant and ambiguous BSD license.

(From OE-Core rev: 5c0b03cda19bcebfc71e1e601a4336fcda4bfc2b)

(From OE-Core rev: f61fcb6e176f19f1e768ce63a693f238713c8887)

Signed-off-by: Ross Burton <ross.burton@arm.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Signed-off-by: Mikko Rapeli <mikko.rapeli@bmw.de>
(cherry picked from commit 7eaab4b261)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-02 16:53:08 +00:00
Wang Mingyu
104c0e6938 openssh: Improve LICENSE to show BSD license variants.
Update LICENSE to show that BSD-2-Clause, BSD-3-Clause and BSD-4-Clause
are all present.

(From OE-Core rev: d17938953fc2524bc5f04db4409a47aa400e756a)

(From OE-Core rev: efe0bb929bb6e480110ceae567bf3c8d5ca5f379)

Signed-off-by: Wang Mingyu <wangmy@cn.fujitsu.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Signed-off-by: Mikko Rapeli <mikko.rapeli@bmw.de>
(cherry picked from commit e42870e233)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-02 16:53:08 +00:00
Peter Bergin
8ee284f8b2 systemd: add packageconfig for wheel-group
If the distro does not include the group 'wheel' systemd will
complain when trying to parse ACL rules for tmpfiles.d.

  systemd-tmpfiles[273]: Failed to parse ACL "d:group:adm:r-x,d:group:wheel:r-x": Invalid argument. Ignoring

Systemd has a configuration parameter to avoid using 'wheel'
group in the standard config files for tmpfiles. Add this as
a PACKAGECONFIG and enable it by default to keep default.

(From OE-Core rev: 1b5648e6aeb9837cb807ce086c26fbfaa16f6f8b)

(From OE-Core rev: 88d2c3d807a5f6bdd858de39506762aaca834aa9)

Signed-off-by: Peter Bergin <peter@berginkonsult.se>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 457cc45f51)

Upstream-Status: Backport
Signed-off-by: Sana Kazi <Sana.Kazi@kpit.com>
Signed-off-by: Sana Kazi <sanakazisk19@gmail.com>
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-02 16:53:08 +00:00
Denys Dmytriyenko
46f68b5121 make-mod-scripts: pass CROSS_COMPILE to configure and build
Fixes:
|   CALL    /OE/poky-master/build/tmp/work-shared/qemuarm64/kernel-source/scripts/checksyscalls.sh
|   CALL    /OE/poky-master/build/tmp/work-shared/qemuarm64/kernel-source/scripts/atomic/check-atomics.sh
|   LDS     arch/arm64/kernel/vdso/vdso.lds
|   CC      arch/arm64/kernel/vdso/vgettimeofday.o
|   AS      arch/arm64/kernel/vdso/note.o
|   AS      arch/arm64/kernel/vdso/sigreturn.o
|   LD      arch/arm64/kernel/vdso/vdso.so.dbg
|   VDSOSYM include/generated/vdso-offsets.h
|   OBJCOPY arch/arm64/kernel/vdso/vdso.so
| objcopy: Unable to recognise the format of the input file `arch/arm64/kernel/vdso/vdso.so.dbg'
| /OE/poky-master/build/tmp/work-shared/qemuarm64/kernel-source/arch/arm64/kernel/vdso/Makefile:61: recipe for target 'arch/arm64/kernel/vdso/vdso.so' failed

Cc: Bruce Ashfield <bruce.ashfield@gmail.com>
Cc: Nishanth Menon <nm@ti.com>
(From OE-Core rev: 225ae178fc5fcdca17d9afab74193f8bd451b46a)

Signed-off-by: Denys Dmytriyenko <denis@denix.org>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit ddad8183490c725062626fa52985da2b04a2aa8f)
Reported-by: Daniel Thompson <daniel.thompson@linaro.org>
Signed-off-by: Nicolas Dechesne <nicolas.dechesne@linaro.org>
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-02 16:53:08 +00:00
Richard Purdie
e24afc304a reproducible_build/package_XXX: Ensure SDE task is in dependency chain
(From OE-Core rev: c8c0757f06a8cfa2159575e0b98530b899a889b1)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 938e4dfb68a465f61cb754b2cd28d0728616b5a9)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-02 16:53:08 +00:00
Yi Zhao
22c84eea24 oeqa: fix warnings for append operators combined with +=
(From OE-Core rev: 392d9878e9a195503bbc66e5ed2fadce9d632902)

Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit f2504115f08b173d919d9abe507a0ba440b0d4df)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-02 16:53:08 +00:00
Khem Raj
6e1c3966d1 lrzsz: Use Cross AR during compile
Current code hardcodes archiver to be 'ar' from build host

(From OE-Core rev: 99435486248731700d11144c909a9d688e35dd1d)

Signed-off-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 74ed1d10434213ad3fcf54ded49879090f979e1e)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-02 16:53:08 +00:00
Daniel Gomez
44ce6c4a5d os-release: Add DISTRO_CODENAME as vardeps for do_compile
DISTRO_CODENAME is part of VERSION variable but not used as dependency
for do_compile task. Append it to the vardeps list to rebuild in case it
changes.

(From OE-Core rev: f73a0fbe29434e26285b220964a0d0567c87dbf0)

Signed-off-by: Daniel Gomez <daniel@qtec.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit ee0345057459c6d77fb64902a955e836c6c1e8e4)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-02 16:53:08 +00:00
Claus Stovgaard
e1e7e3c7ba cups: Fix missing installation of cups sysv init scripts
The packageconfig needs to be --disable-systemd as documented in
configure file for cups. With the current value "--without-systemd" the
SYSTEM_DIR variable ends up being set to "no"

It is caused by the --without-* section in configure file resulting in
eval with_$ac_useropt=no ;;

$ac_useropt is "systemd" causing the variable $with_systemd to be set
to "no", because of below test

if test ${with_systemd+y}
then :
  withval=$with_systemd; SYSTEMD_DIR="$withval"
else $as_nop
  SYSTEMD_DIR=""
fi

cups configure test for i if SYSTEMD_DIR is empty to decide if the init
scripts need to be installed. A value of "no" results in that no init
scripts is installed.

With --disable-systemd it works as expected - installing the init files.
Though cups should properly improve their configure script.

(From OE-Core rev: a4c8e2abb7d71697c8d0c53894e82bf2790ae5ac)

Signed-off-by: Claus Stovgaard <clst@ambu.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 967fdd2ba12f22d8e46600ff085833993a32cfeb)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-02 16:53:07 +00:00
Alexander Kanavin
89a0148b50 libpcre/libpcre2: correct SRC_URI
http://ftp.pcre.org is down, take sources according to links on
http://www.pcre.org

(From OE-Core rev: a1bb6b60bbde7da4496db1a2f7e48bbfb637fa4e)

Signed-off-by: Alexander Kanavin <alex@linutronix.de>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 81ba0ba3e8d9c08b8dc69c24fb1d91446739229b)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-02 16:53:07 +00:00
Anuj Mittal
47d6478126 glibc-version.inc: remove branch= from GLIBC_GIT_URI
GLIBC_GIT_URI is used along with branch=${SRCBRANCH} so no need to add
it here.

(From OE-Core rev: e62e0f6757078cef5c793d8fb107b09362db783d)

Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 4c9cfe326913d28f82e6a91d1eeae55a6651f0f7)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-02 16:53:07 +00:00
Jon Mason
30b0a2e1c5 scripts/lib/wic/help.py: Update Fedora Kickstart URLs
The URLs describing Kickstart are no longer valid and do not redirect to
the correct location.  Update them with the correct location.

(From OE-Core rev: f01e3e8ece228a355cb91cbd043e0fe7fa951ebf)

Signed-off-by: Jon Mason <jdmason@kudzu.us>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit e5ac75f93c8128b0761af5fee99e8603ddd1657d)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-02 16:53:07 +00:00
Richard Purdie
82b03a6837 scripts/oe-package-browser: Handle no packages being built
Give the user a proper error message if there aren't packages built,
rather than a less friendly traceback.

[YOCTO #14619]

(From OE-Core rev: 4b6d3564c09dbea3794f2915b65cbd2314ccffb6)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit b14c176b7dd74b7d63ca0f72e6e00fbf209f5a0b)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-02 16:53:07 +00:00
Minjae Kim
e006c87e22 git: fix CVE-2021-40330
git_connect_git in connect.c in Git before 2.30.1 allows a repository path to contain a newline character,
which may result in unexpected cross-protocol requests,
as demonstrated by the git://localhost:1234/%0d%0a%0d%0aGET%20/%20HTTP/1.1 substring.

Upstream-Status: Backport [a02ea57717]
CVE: CVE-2021-40330
(From OE-Core rev: ea0d7ef4a8c9bba94bd603ebd19e502faa86293b)

Signed-off-by: Minjae Kim <flowergom@gmail.com>
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-02 16:53:07 +00:00
Ross Burton
1a5fb730ac gmp: fix CVE-2021-43618
(From OE-Core rev: abf73599c5706a8553a4b1f3553313059c4d9c69)

Signed-off-by: Ross Burton <ross.burton@arm.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit fb3b9a7f668a6ffd56a99e1e8b83cdbad2a4bc66)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-02 16:53:07 +00:00
Ross Burton
3d9e8146d0 vim: fix CVE-2021-3927 and CVE-2021-3928
(From OE-Core rev: b3e4ae0b9fa44a6c604a6228f3e1b63a215aae74)

Signed-off-by: Ross Burton <ross.burton@arm.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 2001631e7a6edb7adc40ee4357466cc54472db71)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-02 16:53:07 +00:00
Ross Burton
695c0cd680 vim: add patch number to CVE-2021-3778 patch
(From OE-Core rev: dc7789ac5277752060c7f5aeede5c4d861951e39)

Signed-off-by: Ross Burton <ross.burton@arm.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 222be29051a3543ac63a0eb07019e90d44429b16)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-02 16:53:07 +00:00
Ross Burton
8821203873 vim: fix CVE-2021-3796, CVE-2021-3872, and CVE-2021-3875
Backport patches from upstream to fix these CVEs.

(From OE-Core rev: 5b69e1116a553a38506b75f5d455ff52d57ce70b)

Signed-off-by: Ross Burton <ross.burton@arm.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit b493eb4f9a6bb75a2f01a53b6c70762845bf79f9)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-02 16:53:07 +00:00
Steve Sakoman
0beeed7d25 Revert "vim: fix 2021-3796"
This reverts commit 53ce5f292fd8d65fd89c977364ea6f7d813c7566.

Reverting in preparation for fixes from master

(From OE-Core rev: bf489893714d1c2d2e4694a5a1e313b661c9fdc4)

Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-02 16:53:07 +00:00
Marta Rybczynska
409df675a8 python3: upgrade 3.8.11 -> 3.8.12
Release Date: Aug. 30, 2021

This is a security release of Python 3.8

Note: The release you're looking at is Python 3.8.12, a security bugfix release
for the legacy 3.8 series. Python 3.10 is now the latest feature release series
of Python 3. Get the latest release of 3.10.x here.

Security content in this release contains four fixes. There are also four
additional fixes for bugs that might have lead to denial-of-service attacks.
Finally, while we're not providing binary installers anymore, for those users
who produce installers, we upgraded the OpenSSL version used to 1.1.1l.
Take a look at the change log for details.

According to the release calendar specified in PEP 569, Python 3.8 is now in the
"security fixes only" stage of its life cycle: 3.8 branch only accepts security
fixes and releases of those are made irregularly in source-only form until
October 2024. Python 3.8 isn't receiving regular bug fixes anymore, and binary
installers are no longer provided for it. Python 3.8.10 was the last full bugfix
release of Python 3.8 with binary installers.

This release includes a fix for CVE-2021-29921.

References:
https://docs.python.org/release/3.8.12/whatsnew/changelog.html#changelog

(From OE-Core rev: ff52cf448c5e26246f8637d0b8957c5c479fa389)

Signed-off-by: Marta Rybczynska <marta.rybczynska@huawei.com>
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-02 16:53:07 +00:00
Alexander Kanavin
b2089f012a linux-firmware: upgrade 20210919 -> 20211027
License-Update: additional firmwares listed

(From OE-Core rev: 8c1d5f39be281833dc05a16674e48a3b704b785c)

Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 1ca3fb1c7f11e04bf8d8bf59901ddd60178cb13c)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-02 16:53:07 +00:00
Bruce Ashfield
e4e3cfdf9c linux-yocto/5.4: update to v5.4.158
Updating linux-yocto/5.4 to the latest korg -stable release that comprises
the following commits:

    c65356f0f726 Linux 5.4.158
    e31d51f8a41f ARM: 9120/1: Revert "amba: make use of -1 IRQs warn"
    960b1fdfc39a Revert "drm/ttm: fix memleak in ttm_transfered_destroy"
    a73ebe514a60 sfc: Fix reading non-legacy supported link modes
    6789e4b7593b Revert "usb: core: hcd: Add support for deferring roothub registration"
    049849492b77 Revert "xhci: Set HCD flag to defer primary roothub registration"
    2461f38384d5 media: firewire: firedtv-avc: fix a buffer overflow in avc_ca_pmt()
    21fc2bb836e5 net: ethernet: microchip: lan743x: Fix skb allocation failure
    e02fdd7db471 vrf: Revert "Reset skb conntrack connection..."
    1ce287eff9f2 scsi: core: Put LLD module refcnt after SCSI device is released
    e6de9a8b5b30 Linux 5.4.157
    39fb393e2102 perf script: Check session->header.env.arch before using it
    472d9354a9ce KVM: s390: preserve deliverable_mask in __airqs_kick_single_vcpu
    07e9a4e1abfe KVM: s390: clear kicked_mask before sleeping again
    5919a07d71b1 cfg80211: correct bridge/4addr mode check
    dba9e632eda0 net: use netif_is_bridge_port() to check for IFF_BRIDGE_PORT
    0f5b4c57dc85 sctp: add vtag check in sctp_sf_ootb
    df527764072c sctp: add vtag check in sctp_sf_do_8_5_1_E_sa
    0aa322b5fe70 sctp: add vtag check in sctp_sf_violation
    d6470c220025 sctp: fix the processing for COOKIE_ECHO chunk
    5fe74d5e4d58 sctp: fix the processing for INIT_ACK chunk
    5953ee99bab1 sctp: use init_tag from inithdr for ABORT chunk
    5395650d154c phy: phy_start_aneg: Add an unlocked version
    c85b696270db phy: phy_ethtool_ksettings_get: Lock the phy for consistency
    0dea6379e273 net/tls: Fix flipped sign in async_wait.err assignment
    e12b8f3c2b73 net: nxp: lpc_eth.c: avoid hang when bringing interface down
    b232898c1d4b net: ethernet: microchip: lan743x: Fix dma allocation failure by using dma_set_mask_and_coherent
    92507dc1efac net: ethernet: microchip: lan743x: Fix driver crash when lan743x_pm_resume fails
    3708aa267d67 nios2: Make NIOS2_DTB_SOURCE_BOOL depend on !COMPILE_TEST
    b1c76f97ad2c RDMA/sa_query: Use strscpy_pad instead of memcpy to copy a string
    18a012869fa7 net: Prevent infinite while loop in skb_tx_hash()
    6422e8471890 net: batman-adv: fix error handling
    1cead23c1c0b regmap: Fix possible double-free in regcache_rbtree_exit()
    207e6e93e7d6 arm64: dts: allwinner: h5: NanoPI Neo 2: Fix ethernet node
    c29c3295e0e5 RDMA/mlx5: Set user priority for DCT
    13ad93a42ce3 nvme-tcp: fix data digest pointer calculation
    b597b0e2e80b nvmet-tcp: fix data digest pointer calculation
    d997d4e4365f IB/hfi1: Fix abba locking issue with sc_disable()
    0f8cdfff0682 IB/qib: Protect from buffer overflow in struct qib_user_sdma_pkt fields
    5f0bfe21c853 tcp_bpf: Fix one concurrency problem in the tcp_bpf_send_verdict function
    bd99782f3ca4 drm/ttm: fix memleak in ttm_transfered_destroy
    d2c64ebcc76a net: lan78xx: fix division by zero in send path
    a37c5e70ac24 cfg80211: scan: fix RCU in cfg80211_add_nontrans_list()
    590abe5becf5 mmc: sdhci-esdhc-imx: clear the buffer_read_ready to reset standard tuning circuit
    07da44b08641 mmc: sdhci: Map more voltage level to SDHCI_POWER_330
    0821c5608d80 mmc: dw_mmc: exynos: fix the finding clock sample value
    08328d65cb78 mmc: cqhci: clear HALT state after CQE enable
    55a3870f4a26 mmc: vub300: fix control-message timeouts
    e0cfd5159f31 net/tls: Fix flipped sign in tls_err_abort() calls
    6a18d155d5b3 Revert "net: mdiobus: Fix memory leak in __mdiobus_register"
    9fdcf66ee413 nfc: port100: fix using -ERRNO as command type mask
    853f22623dd5 ata: sata_mv: Fix the error handling of mv_chip_id()
    6d0b30784fcd Revert "pinctrl: bcm: ns: support updated DT binding as syscon subnode"
    b7dfc536db87 usbnet: fix error return code in usbnet_probe()
    492140e45d2b usbnet: sanity check for maxpacket
    4ba6c163fe64 ipv4: use siphash instead of Jenkins in fnhe_hashfun()
    3f439c231a03 ipv6: use siphash in rt6_exception_hash()
    1cad781ecf37 powerpc/bpf: Fix BPF_MOD when imm == 1
    ca10ddbbabd0 ARM: 9141/1: only warn about XIP address when not compile testing
    40cd32945552 ARM: 9139/1: kprobes: fix arch_init_kprobes() prototype
    2f7647cc13be ARM: 9134/1: remove duplicate memcpy() definition
    9f44f66396f3 ARM: 9133/1: mm: proc-macros: ensure *_tlb_fns are 4B aligned

(From OE-Core rev: dfb12f1571a6d7581a07f2573abbf928365fa850)

Signed-off-by: Bruce Ashfield <bruce.ashfield@gmail.com>
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-02 16:53:07 +00:00
Bruce Ashfield
9071e52286 linux-yocto/5.4: update to v5.4.156
Updating linux-yocto/5.4 to the latest korg -stable release that comprises
the following commits:

    89b6869b942b Linux 5.4.156
    7cdcaa7c765b pinctrl: stm32: use valid pin identifier in stm32_pinctrl_resume()
    a9c4e246f7c3 ARM: 9122/1: select HAVE_FUTEX_CMPXCHG
    a98c81ab1751 tracing: Have all levels of checks prevent recursion
    b0feaa8376f5 net: mdiobus: Fix memory leak in __mdiobus_register
    0ab35e707462 scsi: core: Fix shost->cmd_per_lun calculation in scsi_add_host_with_dma()
    9068beaa049a Input: snvs_pwrkey - add clk handling
    8de335e8199f ALSA: hda: avoid write to STATESTS if controller is in reset
    570bc60dcd00 platform/x86: intel_scu_ipc: Update timeout value in comment
    4054b869dc26 isdn: mISDN: Fix sleeping function called from invalid context
    5001160d3ed5 ARM: dts: spear3xx: Fix gmac node
    e9d9ffa19367 net: stmmac: add support for dwmac 3.40a
    044fa2afd676 btrfs: deal with errors when checking if a dir entry exists during log replay
    d49a293b946d gcc-plugins/structleak: add makefile var for disabling structleak
    e8ef9984418f selftests: netfilter: remove stray bash debug line
    b7fdebde2c9b netfilter: Kconfig: use 'default y' instead of 'm' for bool config option
    285e9210b1fa isdn: cpai: check ctr->cnr to avoid array index out of bound
    1f75f8883b4f nfc: nci: fix the UAF of rf_conn_info object
    4f5d1c29cfab mm, slub: fix potential memoryleak in kmem_cache_open()
    a1ec195a1943 mm, slub: fix mismatch between reconstructed freelist depth and cnt
    8e25a62e8dab powerpc/idle: Don't corrupt back chain when going idle
    d0148cfaf89c KVM: PPC: Book3S HV: Make idle_kvm_start_guest() return 0 if it went to guest
    80bbb0bc3a02 KVM: PPC: Book3S HV: Fix stack handling in idle_kvm_start_guest()
    722e6f6ac818 powerpc64/idle: Fix SP offsets when saving GPRs
    d6f451f1f60c audit: fix possible null-pointer dereference in audit_filter_rules
    c974f2f92c31 ASoC: DAPM: Fix missing kctl change notifications
    5307a77b7149 ALSA: hda/realtek: Add quirk for Clevo PC50HS
    50fc52e5ca59 ALSA: usb-audio: Provide quirk for Sennheiser GSP670 Headset
    0f218ba4c8aa vfs: check fd has read access in kernel_read_file_from_fd()
    f439d2bcb679 elfcore: correct reference to CONFIG_UML
    d3a83576378b ocfs2: mount fails with buffer overflow in strlen
    b05caf023b14 ocfs2: fix data corruption after conversion from inline format
    bce53fbee948 ceph: fix handling of "meta" errors
    151c72bba129 can: j1939: j1939_xtp_rx_rts_session_new(): abort TP less than 9 bytes
    0ddf781882ac can: j1939: j1939_xtp_rx_dat_one(): cancel session if receive TP.DT with error length
    a0e47d2833b4 can: j1939: j1939_netdev_start(): fix UAF for rx_kref of j1939_priv
    7e66cfed66f9 can: j1939: j1939_tp_rxtimer(): fix errant alert in j1939_tp_rxtimer
    1248582e47a9 can: peak_pci: peak_pci_remove(): fix UAF
    ea82c2463e22 can: peak_usb: pcan_usb_fd_decode_status(): fix back to ERROR_ACTIVE state notification
    c26dcd1cb8db can: rcar_can: fix suspend/resume
    8c5585eae3ae net: enetc: fix ethtool counter name for PM0_TERR
    c0b0baade9b8 net: stmmac: Fix E2E delay mechanism
    c4b64011e458 net: hns3: disable sriov before unload hclge layer
    472acf1582fd net: hns3: add limit ets dwrr bandwidth cannot be 0
    b1f9380ee230 net: hns3: reset DWRR of unused tc to zero
    12bdcbc04341 NIOS2: irqflags: rename a redefined register name
    599766696f69 net: dsa: lantiq_gswip: fix register definition
    f49ce82f9b7c lan78xx: select CRC32
    83094f8c44cb netfilter: ipvs: make global sysctl readonly in non-init netns
    ce70ee94dde6 ASoC: wm8960: Fix clock configuration on slave mode
    0f5b08ca22e1 dma-debug: fix sg checks in debug_dma_map_sg()
    50aefa9acc91 NFSD: Keep existing listeners on portlist error
    4a5bf3e729d9 xtensa: xtfpga: Try software restart before simulating CPU reset
    31137288b946 xtensa: xtfpga: use CONFIG_USE_OF instead of CONFIG_OF
    d946a39bad58 ARM: dts: at91: sama5d2_som1_ek: disable ISC node by default
    e7c4819c0b67 tee: optee: Fix missing devices unregister during optee_remove
    b1e9b4e0f656 net: switchdev: do not propagate bridge updates across bridges
    2d22cd048289 parisc: math-emu: Fix fall-through warnings

(From OE-Core rev: 1a1a140984a463e4e74bfbc0c77c0c28e394bbe9)

Signed-off-by: Bruce Ashfield <bruce.ashfield@gmail.com>
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-02 16:53:07 +00:00
Bruce Ashfield
7b8020e282 linux-yocto/5.4: update to v5.4.155
Updating linux-yocto/5.4 to the latest korg -stable release that comprises
the following commits:

    4f508aa9dd3b Linux 5.4.155
    32d2ce0b9499 ionic: don't remove netdev->dev_addr when syncing uc list
    abaf8e8b9081 r8152: select CRC32 and CRYPTO/CRYPTO_HASH/CRYPTO_SHA256
    a4f7d2246e3b qed: Fix missing error code in qed_slowpath_start()
    62d96bb68b4e mqprio: Correct stats in mqprio_dump_class_stats().
    fa272e835325 acpi/arm64: fix next_platform_timer() section mismatch error
    32ac4ed32b9a drm/msm/dsi: fix off by one in dsi_bus_clk_enable error handling
    46200989580c drm/msm/dsi: Fix an error code in msm_dsi_modeset_init()
    f302be08e3de drm/msm: Fix null pointer dereference on pointer edp
    0d5ef1e87554 drm/panel: olimex-lcd-olinuxino: select CRC32
    9225d57f51e2 platform/mellanox: mlxreg-io: Fix argument base in kstrtou32() call
    ae0993739e14 mlxsw: thermal: Fix out-of-bounds memory accesses
    97e6dcb41625 ata: ahci_platform: fix null-ptr-deref in ahci_platform_enable_regulators()
    b9352ed9b983 pata_legacy: fix a couple uninitialized variable bugs
    2bde4aca56db NFC: digital: fix possible memory leak in digital_in_send_sdd_req()
    7ab488d7228a NFC: digital: fix possible memory leak in digital_tg_listen_mdaa()
    69b3a13f0d08 nfc: fix error handling of nfc_proto_register()
    2731eaac1965 ethernet: s2io: fix setting mac address during resume
    4c2eb80fc90b net: encx24j600: check error in devm_regmap_init_encx24j600
    0904e1be2a92 net: stmmac: fix get_hw_feature() on old hardware
    06251ea8d1d9 net/mlx5e: Mutually exclude RX-FCS and RX-port-timestamp
    19a01522c5d0 net: korina: select CRC32
    32b57d897eff net: arc: select CRC32
    2880dc130236 gpio: pca953x: Improve bias setting
    d88774539539 sctp: account stream padding length for reconf chunk
    232c485c6bcd iio: dac: ti-dac5571: fix an error code in probe()
    69696951de5a iio: ssp_sensors: fix error code in ssp_print_mcu_debug()
    10ecff1522eb iio: ssp_sensors: add more range checking in ssp_parse_dataframe()
    ac0688bcd151 iio: light: opt3001: Fixed timeout error when 0 lux
    3c00d93297ff iio: mtk-auxadc: fix case IIO_CHAN_INFO_PROCESSED
    cf4b39907a82 iio: adc128s052: Fix the error handling path of 'adc128_probe()'
    580c09a9ef9e iio: adc: aspeed: set driver data when adc probe.
    1904050cacd7 powerpc/xive: Discard disabled interrupts in get_irqchip_state()
    5683ed468fa0 x86/Kconfig: Do not enable AMD_MEM_ENCRYPT_ACTIVE_BY_DEFAULT automatically
    0594f1d048d8 nvmem: Fix shift-out-of-bound (UBSAN) with byte size cells
    d07571672c90 EDAC/armada-xp: Fix output of uncorrectable error counter
    dba8834baed3 virtio: write back F_VERSION_1 before validate
    1b39a67856cc USB: serial: option: add prod. id for Quectel EG91
    41e178c138d9 USB: serial: option: add Telit LE910Cx composition 0x1204
    848eac2cb785 USB: serial: option: add Quectel EC200S-CN module support
    958e98ca522c USB: serial: qcserial: add EM9191 QDL support
    733dcc08e97b Input: xpad - add support for another USB ID of Nacon GC-100
    9ab5d539bc97 usb: musb: dsps: Fix the probe error path
    278e483dc793 efi: Change down_interruptible() in virt_efi_reset_system() to down_trylock()
    27a847dbc962 efi/cper: use stack buffer for error record decoding
    6e35a5e9267d cb710: avoid NULL pointer subtraction
    e71ce4a81ed4 xhci: Enable trust tx length quirk for Fresco FL11 USB controller
    01c2dcb67e71 xhci: Fix command ring pointer corruption while aborting a command
    7ce7d4a46d6e xhci: guard accesses to ep_state in xhci_endpoint_reset()
    783579057c90 mei: me: add Ice Lake-N device id.
    9264bd22d701 x86/resctrl: Free the ctrlval arrays when domain_setup_mon_state() fails
    10b77e16b35b watchdog: orion: use 0 for unset heartbeat
    9acf1c10f1da btrfs: check for error when looking up inode during dir entry replay
    625565fd80ae btrfs: deal with errors when adding inode reference during log replay
    6e2ac49b21ea btrfs: deal with errors when replaying dir entry during log replay
    005a07c9acd6 btrfs: unlock newly allocated extent buffer after error
    e9f457f056c5 csky: Fixup regs.sr broken in ptrace
    a6f4ea748aa8 csky: don't let sigreturn play with priveleged bits of status register
    98544ca6cbae s390: fix strrchr() implementation
    5959e22e0767 nds32/ftrace: Fix Error: invalid operands (*UND* and *UND* sections) for `^'
    2e41b9c8461f ALSA: hda/realtek: Fix the mic type detection issue for ASUS G551JW
    90cf96afa347 ALSA: hda/realtek - ALC236 headset MIC recording issue
    33627fa4db3e ALSA: hda/realtek: Add quirk for Clevo X170KM-G
    e96079ab1c4e ALSA: hda/realtek: Complete partial device name to avoid ambiguity
    dd3f04831523 ALSA: seq: Fix a potential UAF by wrong private_free call order
    825786f72326 ALSA: usb-audio: Add quirk for VF0770
    43d93325265b ovl: simplify file splice

(From OE-Core rev: 6d7eb36b006fcfa38e21f38d09fb168e387c690a)

Signed-off-by: Bruce Ashfield <bruce.ashfield@gmail.com>
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-02 16:53:07 +00:00
Bruce Ashfield
37cc520f28 linux-yocto/5.4: update to v5.4.154
Updating linux-yocto/5.4 to the latest korg -stable release that comprises
the following commits:

    ce061ef43f1d Linux 5.4.154
    291a48871e51 sched: Always inline is_percpu_thread()
    3e105ecc4ab7 scsi: virtio_scsi: Fix spelling mistake "Unsupport" -> "Unsupported"
    1ff5ee9d3926 scsi: ses: Fix unsigned comparison with less than zero
    83d857d6b096 drm/amdgpu: fix gart.bo pin_count leak
    1843ae8c4b2b net: sun: SUNVNET_COMMON should depend on INET
    6d1d7acb1067 mac80211: check return value of rhashtable_init
    2aaf3fd5e109 net: prevent user from passing illegal stab size
    1e66a472b51b m68k: Handle arrivals of multiple signals correctly
    be191c8e68fe mac80211: Drop frames from invalid MAC address in ad-hoc mode
    fffad5988f28 netfilter: nf_nat_masquerade: defer conntrack walk to work queue
    b3cb06303419 netfilter: nf_nat_masquerade: make async masq_inet6_event handling generic
    a9d8aa2d3ca8 HID: wacom: Add new Intuos BT (CTL-4100WL/CTL-6100WL) device IDs
    8c6680025b49 netfilter: ip6_tables: zero-initialize fragment offset
    744b908a7f3f HID: apple: Fix logical maximum and usage maximum of Magic Keyboard JIS
    b6bccc978ec8 ext4: correct the error path of ext4_write_inline_data_end()
    de4a28b718bb net: phy: bcm7xxx: Fixed indirect MMD operations

(From OE-Core rev: b8f2b67706311672f923dfef9a0587c64c49e840)

Signed-off-by: Bruce Ashfield <bruce.ashfield@gmail.com>
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-02 16:53:07 +00:00
Richard Purdie
349e53d3cc bitbake: process/knotty: Improve early exception handling
The new server startup code means exceptions can happen when we aren't
setup to show them to the user correctly, leading to ugly tracebacks.

Add in some special case handling of BBHandledException to at least
ensure that common case doesn't traceback and the user sees meaningful
output.

In the future, the logging setup can likely be improved, as can the way
runCommand handles exceptions, they all should likely become real
exceptions again on the UI side.

[YOCTO #14022]
[YOCTO #14033]

(Bitbake rev: 7fdd43c5cbde38daa013076de2fdedcf3c3d3107)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 6059d0e77f60ddb679049bd34478f41b1ab7995d)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-02 14:37:53 +00:00
Richard Purdie
1db38c5a18 bitbake: tinfoil: When sending commands we need to process events
The server may be displaying useful information for the user through log
messages so we should display anything that has been sent. Its either this
or expecting every UI to implement this code around every command call
which isn't good API.

[YOCTO #14054]

(Bitbake rev: f20da5247dea524e837c5b6fdeccc79cbafedf90)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 64ae9d7e2fad804dd9e12706c6d76b4b22f9586b)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-02 14:37:53 +00:00
Richard Purdie
b409a428c1 bitbake: command: Ensure exceptions inheriting from BBHandledException are visible
Previous changes allowed BBHandledException to be detected but not exceptions
which inherit from it. Fix this. The code really needs totally reworking
to preserve the exceptions.

[YOCTO #14054]

(Bitbake rev: 80348b68a34b7ec45a0496a4af7f2ae0c26488f0)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit ef762d92df6c2554c6248e80212f984d9ec4c651)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-12-02 14:37:53 +00:00
185 changed files with 8902 additions and 373 deletions

View File

@@ -6,24 +6,24 @@ of OpenEmbedded. It is distro-less (can build a functional image with
DISTRO = "nodistro") and contains only emulated machine support.
For information about OpenEmbedded, see the OpenEmbedded website:
http://www.openembedded.org/
https://www.openembedded.org/
The Yocto Project has extensive documentation about OE including a reference manual
which can be found at:
http://yoctoproject.org/documentation
https://docs.yoctoproject.org/
Contributing
------------
Please refer to
http://www.openembedded.org/wiki/How_to_submit_a_patch_to_OpenEmbedded
https://www.openembedded.org/wiki/How_to_submit_a_patch_to_OpenEmbedded
for guidelines on how to submit patches.
Mailing list:
http://lists.openembedded.org/mailman/listinfo/openembedded-core
https://lists.openembedded.org/g/openembedded-core
Source code:
http://git.openembedded.org/openembedded-core/
https://git.openembedded.org/openembedded-core/

View File

@@ -74,8 +74,12 @@ class Command:
result = command_method(self, commandline)
except CommandError as exc:
return None, exc.args[0]
except (Exception, SystemExit):
except (Exception, SystemExit) as exc:
import traceback
if isinstance(exc, bb.BBHandledException):
# We need to start returning real exceptions here. Until we do, we can't
# tell if an exception is an instance of bb.BBHandledException
return None, "bb.BBHandledException()\n" + traceback.format_exc()
return None, traceback.format_exc()
else:
return result, None
@@ -620,6 +624,16 @@ class CommandsAsync:
command.finishAsyncCommand()
findFilesMatchingInDir.needcache = False
def testCookerCommandEvent(self, command, params):
"""
Dummy command used by OEQA selftest to test tinfoil without IO
"""
pattern = params[0]
command.cooker.testCookerCommandEvent(pattern)
command.finishAsyncCommand()
testCookerCommandEvent.needcache = False
def findConfigFilePath(self, command, params):
"""
Find the path of the requested configuration file

View File

@@ -411,6 +411,8 @@ class BBCooker:
self.data.disableTracking()
def parseConfiguration(self):
self.updateCacheSync()
# Change nice level if we're asked to
nice = self.data.getVar("BB_NICE_LEVEL")
if nice:
@@ -1017,6 +1019,11 @@ class BBCooker:
if matches:
bb.event.fire(bb.event.FilesMatchingFound(filepattern, matches), self.data)
def testCookerCommandEvent(self, filepattern):
# Dummy command used by OEQA selftest to test tinfoil without IO
matches = ["A", "B"]
bb.event.fire(bb.event.FilesMatchingFound(filepattern, matches), self.data)
def findProviders(self, mc=''):
return bb.providers.findProviders(self.databuilder.mcdata[mc], self.recipecaches[mc], self.recipecaches[mc].pkg_pn)

View File

@@ -348,7 +348,12 @@ class ServerCommunicator():
logger.info("No reply from server in 30s")
if not self.recv.poll(30):
raise ProcessTimeout("Timeout while waiting for a reply from the bitbake server (60s)")
return self.recv.get()
ret, exc = self.recv.get()
# Should probably turn all exceptions in exc back into exceptions?
# For now, at least handle BBHandledException
if exc and "BBHandledException" in exc:
raise bb.BBHandledException()
return ret, exc
def updateFeatureSet(self, featureset):
_, error = self.runCommand(["setFeatures", featureset])

View File

@@ -1290,9 +1290,6 @@ class FetchCheckStatusTest(FetcherTest):
"http://downloads.yoctoproject.org/releases/opkg/opkg-0.1.7.tar.gz",
"http://downloads.yoctoproject.org/releases/opkg/opkg-0.3.0.tar.gz",
"ftp://sourceware.org/pub/libffi/libffi-1.20.tar.gz",
"http://ftp.gnu.org/gnu/autoconf/autoconf-2.60.tar.gz",
"https://ftp.gnu.org/gnu/chess/gnuchess-5.08.tar.gz",
"https://ftp.gnu.org/gnu/gmp/gmp-4.0.tar.gz",
# GitHub releases are hosted on Amazon S3, which doesn't support HEAD
"https://github.com/kergoth/tslib/releases/download/1.1/tslib-1.1.tar.xz"
]

View File

@@ -465,7 +465,16 @@ class Tinfoil:
commandline = [command]
if params:
commandline.extend(params)
result = self.server_connection.connection.runCommand(commandline)
try:
result = self.server_connection.connection.runCommand(commandline)
finally:
while True:
event = self.wait_event()
if not event:
break
if isinstance(event, logging.LogRecord):
if event.taskpid == 0 or event.levelno > logging.INFO:
self.logger.handle(event)
if result[1]:
raise TinfoilCommandFailed(result[1])
return result[0]

View File

@@ -380,14 +380,27 @@ _evt_list = [ "bb.runqueue.runQueueExitWait", "bb.event.LogExecTTY", "logging.Lo
"bb.event.BuildBase", "bb.build.TaskStarted", "bb.build.TaskSucceeded", "bb.build.TaskFailedSilent",
"bb.build.TaskProgress", "bb.event.ProcessStarted", "bb.event.ProcessProgress", "bb.event.ProcessFinished"]
def drain_events_errorhandling(eventHandler):
# We don't have logging setup, we do need to show any events we see before exiting
event = True
logger = bb.msg.logger_create('bitbake', sys.stdout)
while event:
event = eventHandler.waitEvent(0)
if isinstance(event, logging.LogRecord):
logger.handle(event)
def main(server, eventHandler, params, tf = TerminalFilter):
if not params.observe_only:
params.updateToServer(server, os.environ.copy())
try:
if not params.observe_only:
params.updateToServer(server, os.environ.copy())
includelogs, loglines, consolelogfile, logconfigfile = _log_settings_from_server(server, params.observe_only)
includelogs, loglines, consolelogfile, logconfigfile = _log_settings_from_server(server, params.observe_only)
loglevel, _ = bb.msg.constructLogOptions()
loglevel, _ = bb.msg.constructLogOptions()
except bb.BBHandledException:
drain_events_errorhandling(eventHandler)
return 1
if params.options.quiet == 0:
console_loglevel = loglevel

View File

@@ -16,7 +16,8 @@ import bb.msg
import multiprocessing
import fcntl
import importlib
from importlib import machinery
import importlib.machinery
import importlib.util
import itertools
import subprocess
import glob
@@ -1584,7 +1585,9 @@ def load_plugins(logger, plugins, pluginpath):
logger.debug(1, 'Loading plugin %s' % name)
spec = importlib.machinery.PathFinder.find_spec(name, path=[pluginpath] )
if spec:
return spec.loader.load_module()
mod = importlib.util.module_from_spec(spec)
spec.loader.exec_module(mod)
return mod
logger.debug(1, 'Loading plugins from %s...' % pluginpath)

View File

@@ -50,10 +50,10 @@ class ActionPlugin(LayerPlugin):
if not (args.force or notadded):
try:
self.tinfoil.run_command('parseConfiguration')
except bb.tinfoil.TinfoilUIException:
except (bb.tinfoil.TinfoilUIException, bb.BBHandledException):
# Restore the back up copy of bblayers.conf
shutil.copy2(backup, bblayers_conf)
bb.fatal("Parse failure with the specified layer added")
bb.fatal("Parse failure with the specified layer added, aborting.")
else:
for item in notadded:
sys.stderr.write("Specified layer %s is already in BBLAYERS\n" % item)

View File

@@ -12,6 +12,7 @@ import math
import os
import signal
import socket
import sys
import time
from . import chunkify, DEFAULT_MAX_CHUNK
@@ -419,9 +420,14 @@ class Server(object):
self._cleanup_socket = None
def start_tcp_server(self, host, port):
self.server = self.loop.run_until_complete(
asyncio.start_server(self.handle_client, host, port)
)
if sys.version_info[0] == 3 and sys.version_info[1] < 6:
self.server = self.loop.run_until_complete(
asyncio.start_server(self.handle_client, host, port, loop=self.loop)
)
else:
self.server = self.loop.run_until_complete(
asyncio.start_server(self.handle_client, host, port)
)
for s in self.server.sockets:
logger.info('Listening on %r' % (s.getsockname(),))
@@ -444,9 +450,14 @@ class Server(object):
try:
# Work around path length limits in AF_UNIX
os.chdir(os.path.dirname(path))
self.server = self.loop.run_until_complete(
asyncio.start_unix_server(self.handle_client, os.path.basename(path))
)
if sys.version_info[0] == 3 and sys.version_info[1] < 6:
self.server = self.loop.run_until_complete(
asyncio.start_unix_server(self.handle_client, os.path.basename(path), loop=self.loop)
)
else:
self.server = self.loop.run_until_complete(
asyncio.start_unix_server(self.handle_client, os.path.basename(path))
)
finally:
os.chdir(cwd)

View File

@@ -16,7 +16,8 @@ import os
import sys
import datetime
current_version = "3.1.12"
current_version = "3.1.13"
bitbake_version = "1.46"
# String used in sidebar
version = 'Version: ' + current_version
@@ -82,7 +83,7 @@ extlinks = {
# Intersphinx config to use cross reference with Bitbake user manual
intersphinx_mapping = {
'bitbake': ('https://docs.yoctoproject.org/bitbake/1.46', None)
'bitbake': ('https://docs.yoctoproject.org/bitbake/' + bitbake_version, None)
}
# -- Options for HTML output -------------------------------------------------

View File

@@ -1,11 +1,11 @@
DISTRO : "3.1.12"
DISTRO : "3.1.13"
DISTRO_NAME_NO_CAP : "dunfell"
DISTRO_NAME : "Dunfell"
DISTRO_NAME_NO_CAP_MINUS_ONE : "zeus"
YOCTO_DOC_VERSION : "3.1.12"
YOCTO_DOC_VERSION_MINUS_ONE : "3.0.2"
DISTRO_REL_TAG : "yocto-3.1.12"
POKYVERSION : "23.0.12"
YOCTO_DOC_VERSION : "3.1.13"
YOCTO_DOC_VERSION_MINUS_ONE : "3.0.4"
DISTRO_REL_TAG : "yocto-3.1.13"
POKYVERSION : "23.0.13"
YOCTO_POKY : "poky-&DISTRO_NAME_NO_CAP;-&POKYVERSION;"
YOCTO_DL_URL : "https://downloads.yoctoproject.org"
YOCTO_AB_URL : "https://autobuilder.yoctoproject.org"

View File

@@ -184,8 +184,7 @@ The following BitBake changes have occurred.
exceptions. Remove this argument in any calls to
``bb.build.exec_func()`` in custom classes or scripts.
- The
:term:`bitbake:BB_SETSCENE_VERIFY_FUNCTION2`
- The ``BB_SETSCENE_VERIFY_FUNCTION2`` variable
is no longer used. In the unlikely event that you have any references
to it, they should be removed.

View File

@@ -331,22 +331,19 @@ file as a patch file:
file://file;apply=yes \
"
Conversely, if you have a directory full of patch files and you want to
exclude some so that the ``do_patch`` task does not apply them during
the patch phase, you can use the "apply=no" parameter with the
``SRC_URI`` statement:
::
Conversely, if you have a file whose file type is ``.patch`` or ``.diff``
and you want to exclude it so that the ``do_patch`` task does not apply
it during the patch phase, you can use the "apply=no" parameter with the
:term:`SRC_URI` statement::
SRC_URI = " \
git://path_to_repo/some_package \
file://path_to_lots_of_patch_files \
file://path_to_lots_of_patch_files/patch_file5;apply=no \
file://file1.patch \
file://file2.patch;apply=no \
"
In the
previous example, assuming all the files in the directory holding the
patch files end with either ``.patch`` or ``.diff``, every file would be
applied as a patch by default except for the ``patch_file5`` patch.
In the previous example ``file1.patch`` would be applied as a patch by default
while ``file2.patch`` would not be applied.
You can find out more about the patching process in the
":ref:`patching-dev-environment`" section in

View File

@@ -1,11 +1,28 @@
.. SPDX-License-Identifier: CC-BY-SA-2.0-UK
=========================
Current Release Manuals
=========================
===========================
Supported Release Manuals
===========================
******************************
Release Series 3.4 (honister)
******************************
- :yocto_docs:`3.4 Documentation </3.4>`
- :yocto_docs:`3.4.1 Documentation </3.4.1>`
******************************
Release Series 3.3 (hardknott)
******************************
- :yocto_docs:`3.3 Documentation </3.3>`
- :yocto_docs:`3.3.1 Documentation </3.3.1>`
- :yocto_docs:`3.3.2 Documentation </3.3.2>`
- :yocto_docs:`3.3.3 Documentation </3.3.3>`
- :yocto_docs:`3.3.4 Documentation </3.3.4>`
****************************
3.1 'dunfell' Release Series
Release Series 3.1 (dunfell)
****************************
- :yocto_docs:`3.1 Documentation </3.1>`
@@ -21,13 +38,24 @@
- :yocto_docs:`3.1.10 Documentation </3.1.10>`
- :yocto_docs:`3.1.11 Documentation </3.1.11>`
- :yocto_docs:`3.1.12 Documentation </3.1.12>`
- :yocto_docs:`3.1.13 Documentation </3.1.13>`
==========================
Previous Release Manuals
Outdated Release Manuals
==========================
*******************************
Release Series 3.2 (gatesgarth)
*******************************
- :yocto_docs:`3.2 Documentation </3.2>`
- :yocto_docs:`3.2.1 Documentation </3.2.1>`
- :yocto_docs:`3.2.2 Documentation </3.2.2>`
- :yocto_docs:`3.2.3 Documentation </3.2.3>`
- :yocto_docs:`3.2.4 Documentation </3.2.4>`
*************************
3.0 'zeus' Release Series
Release Series 3.0 (zeus)
*************************
- :yocto_docs:`3.0 Documentation </3.0>`
@@ -37,7 +65,7 @@
- :yocto_docs:`3.0.4 Documentation </3.0.4>`
****************************
2.7 'warrior' Release Series
Release Series 2.7 (warrior)
****************************
- :yocto_docs:`2.7 Documentation </2.7>`
@@ -47,7 +75,7 @@
- :yocto_docs:`2.7.4 Documentation </2.7.4>`
*************************
2.6 'thud' Release Series
Release Series 2.6 (thud)
*************************
- :yocto_docs:`2.6 Documentation </2.6>`
@@ -57,16 +85,16 @@
- :yocto_docs:`2.6.4 Documentation </2.6.4>`
*************************
2.5 'sumo' Release Series
Release Series 2.5 (sumo)
*************************
- :yocto_docs:`2.5 Documentation </2.5>`
- :yocto_docs:`2.5.1 Documentation </2.5.1>`
- :yocto_docs:`2.5.2 Documentation </2.5.2>`
- :yocto_docs:`2.5.3 Documentation </2.5.3>`
**************************
2.4 'rocko' Release Series
Release Series 2.4 (rocko)
**************************
- :yocto_docs:`2.4 Documentation </2.4>`
@@ -76,7 +104,7 @@
- :yocto_docs:`2.4.4 Documentation </2.4.4>`
*************************
2.3 'pyro' Release Series
Release Series 2.3 (pyro)
*************************
- :yocto_docs:`2.3 Documentation </2.3>`
@@ -86,7 +114,7 @@
- :yocto_docs:`2.3.4 Documentation </2.3.4>`
**************************
2.2 'morty' Release Series
Release Series 2.2 (morty)
**************************
- :yocto_docs:`2.2 Documentation </2.2>`
@@ -95,7 +123,7 @@
- :yocto_docs:`2.2.3 Documentation </2.2.3>`
****************************
2.1 'krogoth' Release Series
Release Series 2.1 (krogoth)
****************************
- :yocto_docs:`2.1 Documentation </2.1>`
@@ -104,7 +132,7 @@
- :yocto_docs:`2.1.3 Documentation </2.1.3>`
***************************
2.0 'jethro' Release Series
Release Series 2.0 (jethro)
***************************
- :yocto_docs:`1.9 Documentation </1.9>`
@@ -114,7 +142,7 @@
- :yocto_docs:`2.0.3 Documentation </2.0.3>`
*************************
1.8 'fido' Release Series
Release Series 1.8 (fido)
*************************
- :yocto_docs:`1.8 Documentation </1.8>`
@@ -122,7 +150,7 @@
- :yocto_docs:`1.8.2 Documentation </1.8.2>`
**************************
1.7 'dizzy' Release Series
Release Series 1.7 (dizzy)
**************************
- :yocto_docs:`1.7 Documentation </1.7>`
@@ -131,16 +159,16 @@
- :yocto_docs:`1.7.3 Documentation </1.7.3>`
**************************
1.6 'daisy' Release Series
Release Series 1.6 (daisy)
**************************
- :yocto_docs:`1.6 Documentation </1.6>`
- :yocto_docs:`1.6.1 Documentation </1.6.1>`
- :yocto_docs:`1.6.2 Documentation </1.6.2>`
- :yocto_docs:`1.6.3 Documentation </1.6.3>`
*************************
1.5 'dora' Release Series
Release Series 1.5 (dora)
*************************
- :yocto_docs:`1.5 Documentation </1.5>`
@@ -150,7 +178,7 @@
- :yocto_docs:`1.5.4 Documentation </1.5.4>`
**************************
1.4 'dylan' Release Series
Release Series 1.4 (dylan)
**************************
- :yocto_docs:`1.4 Documentation </1.4>`
@@ -159,9 +187,9 @@
- :yocto_docs:`1.4.3 Documentation </1.4.3>`
- :yocto_docs:`1.4.4 Documentation </1.4.4>`
- :yocto_docs:`1.4.5 Documentation </1.4.5>`
**************************
1.3 'danny' Release Series
Release Series 1.3 (danny)
**************************
- :yocto_docs:`1.3 Documentation </1.3>`
@@ -169,7 +197,7 @@
- :yocto_docs:`1.3.2 Documentation </1.3.2>`
***************************
1.2 'denzil' Release Series
Release Series 1.2 (denzil)
***************************
- :yocto_docs:`1.2 Documentation </1.2>`
@@ -177,7 +205,7 @@
- :yocto_docs:`1.2.2 Documentation </1.2.2>`
***************************
1.1 'edison' Release Series
Release Series 1.1 (edison)
***************************
- :yocto_docs:`1.1 Documentation </1.1>`
@@ -185,7 +213,7 @@
- :yocto_docs:`1.1.2 Documentation </1.1.2>`
****************************
1.0 'bernard' Release Series
Release Series 1.0 (bernard)
****************************
- :yocto_docs:`1.0 Documentation </1.0>`
@@ -193,7 +221,7 @@
- :yocto_docs:`1.0.2 Documentation </1.0.2>`
****************************
0.9 'laverne' Release Series
Release Series 0.9 (laverne)
****************************
- :yocto_docs:`0.9 Documentation </0.9>`

View File

@@ -2,8 +2,11 @@
'use strict';
var all_versions = {
'dev': 'dev (3.3)',
'3.1.12': '3.1.12',
'dev': 'dev (3.5)',
'3.4.1': '3.4.1',
'3.3.4': '3.3.4',
'3.2.4': '3.2.4',
'3.1.13': '3.1.13',
'3.0.4': '3.0.4',
'2.7.4': '2.7.4',
};

View File

@@ -1,6 +1,6 @@
DISTRO = "poky"
DISTRO_NAME = "Poky (Yocto Project Reference Distro)"
DISTRO_VERSION = "3.1.12"
DISTRO_VERSION = "3.1.14"
DISTRO_CODENAME = "dunfell"
SDK_VENDOR = "-pokysdk"
SDK_VERSION = "${@d.getVar('DISTRO_VERSION').replace('snapshot-${DATE}', 'snapshot')}"

View File

@@ -7,8 +7,8 @@ KMACHINE_genericx86 ?= "common-pc"
KMACHINE_genericx86-64 ?= "common-pc-64"
KMACHINE_beaglebone-yocto ?= "beaglebone"
SRCREV_machine_genericx86 ?= "31db2b47ac7d8508080fbb7344399b501216de66"
SRCREV_machine_genericx86-64 ?= "31db2b47ac7d8508080fbb7344399b501216de66"
SRCREV_machine_genericx86 ?= "76404f1ae59698b6a446dba29c885ca78c69c330"
SRCREV_machine_genericx86-64 ?= "76404f1ae59698b6a446dba29c885ca78c69c330"
SRCREV_machine_edgerouter ?= "706efec4c1e270ec5dda92275898cd465dfdc7dd"
SRCREV_machine_beaglebone-yocto ?= "706efec4c1e270ec5dda92275898cd465dfdc7dd"
@@ -17,7 +17,7 @@ COMPATIBLE_MACHINE_genericx86-64 = "genericx86-64"
COMPATIBLE_MACHINE_edgerouter = "edgerouter"
COMPATIBLE_MACHINE_beaglebone-yocto = "beaglebone-yocto"
LINUX_VERSION_genericx86 = "5.4.94"
LINUX_VERSION_genericx86-64 = "5.4.94"
LINUX_VERSION_genericx86 = "5.4.158"
LINUX_VERSION_genericx86-64 = "5.4.158"
LINUX_VERSION_edgerouter = "5.4.58"
LINUX_VERSION_beaglebone-yocto = "5.4.58"

View File

@@ -953,23 +953,19 @@ def write_latest_srcrev(d, pkghistdir):
value = value.replace('"', '').strip()
old_tag_srcrevs[key] = value
with open(srcrevfile, 'w') as f:
orig_srcrev = d.getVar('SRCREV', False) or 'INVALID'
if orig_srcrev != 'INVALID':
f.write('# SRCREV = "%s"\n' % orig_srcrev)
if len(srcrevs) > 1:
for name, srcrev in sorted(srcrevs.items()):
orig_srcrev = d.getVar('SRCREV_%s' % name, False)
if orig_srcrev:
f.write('# SRCREV_%s = "%s"\n' % (name, orig_srcrev))
f.write('SRCREV_%s = "%s"\n' % (name, srcrev))
else:
f.write('SRCREV = "%s"\n' % next(iter(srcrevs.values())))
if len(tag_srcrevs) > 0:
for name, srcrev in sorted(tag_srcrevs.items()):
f.write('# tag_%s = "%s"\n' % (name, srcrev))
if name in old_tag_srcrevs and old_tag_srcrevs[name] != srcrev:
pkg = d.getVar('PN')
bb.warn("Revision for tag %s in package %s was changed since last build (from %s to %s)" % (name, pkg, old_tag_srcrevs[name], srcrev))
for name, srcrev in sorted(srcrevs.items()):
suffix = "_" + name
if name == "default":
suffix = ""
orig_srcrev = d.getVar('SRCREV%s' % suffix, False)
if orig_srcrev:
f.write('# SRCREV%s = "%s"\n' % (suffix, orig_srcrev))
f.write('SRCREV%s = "%s"\n' % (suffix, srcrev))
for name, srcrev in sorted(tag_srcrevs.items()):
f.write('# tag_%s = "%s"\n' % (name, srcrev))
if name in old_tag_srcrevs and old_tag_srcrevs[name] != srcrev:
pkg = d.getVar('PN')
bb.warn("Revision for tag %s in package %s was changed since last build (from %s to %s)" % (name, pkg, old_tag_srcrevs[name], srcrev))
else:
if os.path.exists(srcrevfile):

View File

@@ -110,7 +110,8 @@ python do_cve_check () {
}
addtask cve_check before do_build after do_fetch
do_cve_check[depends] = "cve-update-db-native:do_populate_cve_db"
do_cve_check[lockfiles] += "${CVE_CHECK_DB_FILE_LOCK}"
do_cve_check[depends] = "cve-update-db-native:do_fetch"
do_cve_check[nostamp] = "1"
python cve_check_cleanup () {

View File

@@ -315,8 +315,8 @@ do_package_write_deb[dirs] = "${PKGWRITEDIRDEB}"
do_package_write_deb[cleandirs] = "${PKGWRITEDIRDEB}"
do_package_write_deb[umask] = "022"
do_package_write_deb[depends] += "${@oe.utils.build_depends_string(d.getVar('PACKAGE_WRITE_DEPS'), 'do_populate_sysroot')}"
addtask package_write_deb after do_packagedata do_package
EPOCHTASK ??= ""
addtask package_write_deb after do_packagedata do_package ${EPOCHTASK}
PACKAGEINDEXDEPS += "dpkg-native:do_populate_sysroot"
PACKAGEINDEXDEPS += "apt-native:do_populate_sysroot"

View File

@@ -274,7 +274,8 @@ do_package_write_ipk[dirs] = "${PKGWRITEDIRIPK}"
do_package_write_ipk[cleandirs] = "${PKGWRITEDIRIPK}"
do_package_write_ipk[umask] = "022"
do_package_write_ipk[depends] += "${@oe.utils.build_depends_string(d.getVar('PACKAGE_WRITE_DEPS'), 'do_populate_sysroot')}"
addtask package_write_ipk after do_packagedata do_package
EPOCHTASK ??= ""
addtask package_write_ipk after do_packagedata do_package ${EPOCHTASK}
PACKAGEINDEXDEPS += "opkg-utils-native:do_populate_sysroot"
PACKAGEINDEXDEPS += "opkg-native:do_populate_sysroot"

View File

@@ -743,7 +743,8 @@ do_package_write_rpm[dirs] = "${PKGWRITEDIRRPM}"
do_package_write_rpm[cleandirs] = "${PKGWRITEDIRRPM}"
do_package_write_rpm[umask] = "022"
do_package_write_rpm[depends] += "${@oe.utils.build_depends_string(d.getVar('PACKAGE_WRITE_DEPS'), 'do_populate_sysroot')}"
addtask package_write_rpm after do_packagedata do_package
EPOCHTASK ??= ""
addtask package_write_rpm after do_packagedata do_package ${EPOCHTASK}
PACKAGEINDEXDEPS += "rpm-native:do_populate_sysroot"
PACKAGEINDEXDEPS += "createrepo-c-native:do_populate_sysroot"

View File

@@ -106,6 +106,8 @@ python create_source_date_epoch_stamp() {
os.rename(tmp_file, epochfile)
}
EPOCHTASK = "do_deploy_source_date_epoch"
# Generate the stamp after do_unpack runs
do_unpack[postfuncs] += "create_source_date_epoch_stamp"

View File

@@ -44,7 +44,14 @@ CVE_CHECK_WHITELIST += "CVE-2010-4756"
# exposing this interface in an exploitable way
CVE_CHECK_WHITELIST += "CVE-2020-29509 CVE-2020-29511"
# db
# Since Oracle relicensed bdb, the open source community is slowly but surely replacing bdb with
# supported and open source friendly alternatives. As a result these CVEs are unlikely to ever be fixed.
CVE_CHECK_WHITELIST += "CVE-2015-2583 CVE-2015-2624 CVE-2015-2626 CVE-2015-2640 CVE-2015-2654 \
CVE-2015-2656 CVE-2015-4754 CVE-2015-4764 CVE-2015-4774 CVE-2015-4775 CVE-2015-4776 CVE-2015-4777 \
CVE-2015-4778 CVE-2015-4779 CVE-2015-4780 CVE-2015-4781 CVE-2015-4782 CVE-2015-4783 CVE-2015-4784 \
CVE-2015-4785 CVE-2015-4786 CVE-2015-4787 CVE-2015-4788 CVE-2015-4789 CVE-2015-4790 CVE-2016-0682 \
CVE-2016-0689 CVE-2016-0692 CVE-2016-0694 CVE-2016-3418 CVE-2020-2981"
#### CPE update pending ####

View File

@@ -576,6 +576,7 @@ RECIPE_MAINTAINER_pn-python3 = "Oleksandr Kravchuk <open.source@oleksandr-kravch
RECIPE_MAINTAINER_pn-python3-async = "Oleksandr Kravchuk <open.source@oleksandr-kravchuk.com>"
RECIPE_MAINTAINER_pn-python3-dbus = "Oleksandr Kravchuk <open.source@oleksandr-kravchuk.com>"
RECIPE_MAINTAINER_pn-python3-docutils = "Oleksandr Kravchuk <open.source@oleksandr-kravchuk.com>"
RECIPE_MAINTAINER_pn-python3-dtschema-wrapper = "Bruce Ashfield <bruce.ashfield@gmail.com>"
RECIPE_MAINTAINER_pn-python3-pycryptodome = "Joshua Watt <JPEWhacker@gmail.com>"
RECIPE_MAINTAINER_pn-python3-pycryptodomex = "Joshua Watt <JPEWhacker@gmail.com>"
RECIPE_MAINTAINER_pn-python3-extras = "Oleksandr Kravchuk <open.source@oleksandr-kravchuk.com>"

View File

@@ -41,7 +41,7 @@ def find_git_folder(d, sourcedir):
for root, dirs, files in os.walk(workdir, topdown=True):
dirs[:] = [d for d in dirs if d not in exclude]
if '.git' in dirs:
return root
return os.path.join(root, ".git")
bb.warn("Failed to find a git repository in WORKDIR: %s" % workdir)
return None

View File

@@ -10,7 +10,7 @@ from oeqa.core.decorator.depends import OETestDepends
from oeqa.core.decorator.data import skipIfNotFeature
# need some kernel fragments
# echo "KERNEL_FEATURES_append += \" features\/kernel\-sample\/kernel\-sample.scc\"" >> local.conf
# echo "KERNEL_FEATURES_append = \" features\/kernel\-sample\/kernel\-sample.scc\"" >> local.conf
class KSample(OERuntimeTestCase):
def cmd_and_check(self, cmd='', match_string=''):
status, output = self.target.run(cmd)

View File

@@ -61,6 +61,8 @@ common_errors = [
"[rdrand]: Initialization Failed",
"[pulseaudio] authkey.c: Failed to open cookie file",
"[pulseaudio] authkey.c: Failed to load authentication key",
"was skipped because of a failed condition check",
"was skipped because all trigger condition checks failed",
]
video_related = [
@@ -296,7 +298,7 @@ class ParseLogsTest(OERuntimeTestCase):
grepcmd = 'grep '
grepcmd += '-Ei "'
for error in errors:
grepcmd += '\<' + error + '\>' + '|'
grepcmd += r'\<' + error + r'\>' + '|'
grepcmd = grepcmd[:-1]
grepcmd += '" ' + str(log) + " | grep -Eiv \'"
@@ -307,13 +309,13 @@ class ParseLogsTest(OERuntimeTestCase):
errorlist = ignore_errors['default']
for ignore_error in errorlist:
ignore_error = ignore_error.replace('(', '\(')
ignore_error = ignore_error.replace(')', '\)')
ignore_error = ignore_error.replace('(', r'\(')
ignore_error = ignore_error.replace(')', r'\)')
ignore_error = ignore_error.replace("'", '.')
ignore_error = ignore_error.replace('?', '\?')
ignore_error = ignore_error.replace('[', '\[')
ignore_error = ignore_error.replace(']', '\]')
ignore_error = ignore_error.replace('*', '\*')
ignore_error = ignore_error.replace('?', r'\?')
ignore_error = ignore_error.replace('[', r'\[')
ignore_error = ignore_error.replace(']', r'\]')
ignore_error = ignore_error.replace('*', r'\*')
ignore_error = ignore_error.replace('0-9', '[0-9]')
grepcmd += ignore_error + '|'
grepcmd = grepcmd[:-1]

View File

@@ -157,7 +157,7 @@ SSTATE_DIR = \"${TOPDIR}/download-selftest\"
""")
self.track_for_cleanup(os.path.join(self.builddir, "download-selftest"))
data = 'SRC_URI = "${GNU_MIRROR}/aspell/aspell-${PV}.tar.gz;downloadfilename=test-aspell.tar.gz"'
data = 'SRC_URI = "https://downloads.yoctoproject.org/mirror/sources/aspell-${PV}.tar.gz;downloadfilename=test-aspell.tar.gz"'
self.write_recipeinc('aspell', data)
result = bitbake('-f -c fetch aspell', ignore_status=True)
self.delete_recipeinc('aspell')

View File

@@ -442,6 +442,7 @@ class DevtoolAddTests(DevtoolBase):
tempdir = tempfile.mkdtemp(prefix='devtoolqa')
self.track_for_cleanup(tempdir)
url = 'gitsm://git.yoctoproject.org/mraa'
url_branch = '%s;branch=master' % url
checkrev = 'ae127b19a50aa54255e4330ccfdd9a5d058e581d'
testrecipe = 'mraa'
srcdir = os.path.join(tempdir, testrecipe)
@@ -462,7 +463,7 @@ class DevtoolAddTests(DevtoolBase):
checkvars = {}
checkvars['S'] = '${WORKDIR}/git'
checkvars['PV'] = '1.0+git${SRCPV}'
checkvars['SRC_URI'] = url
checkvars['SRC_URI'] = url_branch
checkvars['SRCREV'] = '${AUTOREV}'
self._test_recipe_contents(recipefile, checkvars, [])
# Try with revision and version specified
@@ -481,7 +482,7 @@ class DevtoolAddTests(DevtoolBase):
checkvars = {}
checkvars['S'] = '${WORKDIR}/git'
checkvars['PV'] = '1.5+git${SRCPV}'
checkvars['SRC_URI'] = url
checkvars['SRC_URI'] = url_branch
checkvars['SRCREV'] = checkrev
self._test_recipe_contents(recipefile, checkvars, [])

View File

@@ -240,7 +240,7 @@ USERADD_GID_TABLES += "files/static-group"
def test_no_busybox_base_utils(self):
config = """
# Enable x11
DISTRO_FEATURES_append += "x11"
DISTRO_FEATURES_append = " x11"
# Switch to systemd
DISTRO_FEATURES += "systemd"

View File

@@ -179,6 +179,12 @@ class TestImage(OESelftestTestCase):
self.skipTest('virgl isn\'t working with Debian 8')
if distro and distro == 'centos-7':
self.skipTest('virgl isn\'t working with Centos 7')
if distro and distro == 'centos-8':
self.skipTest('virgl isn\'t working with Centos 8')
if distro and distro == 'fedora-34':
self.skipTest('virgl isn\'t working with Fedora 34')
if distro and distro == 'fedora-35':
self.skipTest('virgl isn\'t working with Fedora 35')
if distro and distro == 'opensuseleap-15.0':
self.skipTest('virgl isn\'t working with Opensuse 15.0')

View File

@@ -94,16 +94,15 @@ class TinfoilTests(OESelftestTestCase):
pass
pattern = 'conf'
res = tinfoil.run_command('findFilesMatchingInDir', pattern, 'conf/machine')
res = tinfoil.run_command('testCookerCommandEvent', pattern)
self.assertTrue(res)
eventreceived = False
commandcomplete = False
start = time.time()
# Wait for maximum 60s in total so we'd detect spurious heartbeat events for example
# The test is IO load sensitive too
# Wait for maximum 120s in total so we'd detect spurious heartbeat events for example
while (not (eventreceived == True and commandcomplete == True)
and (time.time() - start < 60)):
and (time.time() - start < 120)):
# if we received both events (on let's say a good day), we are done
event = tinfoil.wait_event(1)
if event:
@@ -111,7 +110,8 @@ class TinfoilTests(OESelftestTestCase):
commandcomplete = True
elif isinstance(event, bb.event.FilesMatchingFound):
self.assertEqual(pattern, event._pattern)
self.assertIn('qemuarm.conf', event._matches)
self.assertIn('A', event._matches)
self.assertIn('B', event._matches)
eventreceived = True
elif isinstance(event, logging.LogRecord):
continue

View File

@@ -0,0 +1,76 @@
From 0d237c0b90f0c6d4a3662c569b2371ae3ed69574 Mon Sep 17 00:00:00 2001
From: Javier Martinez Canillas <javierm@redhat.com>
Date: Mon, 28 Sep 2020 20:08:41 +0200
Subject: [PATCH] acpi: Don't register the acpi command when locked down
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
The command is not allowed when lockdown is enforced. Otherwise an
attacker can instruct the GRUB to load an SSDT table to overwrite
the kernel lockdown configuration and later load and execute
unsigned code.
Fixes: CVE-2020-14372
Reported-by: Máté Kukri <km@mkukri.xyz>
Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
Upstream-Status: Backport [https://git.savannah.gnu.org/cgit/grub.git/commit/?id=3e8e4c0549240fa209acffceb473e1e509b50c95]
CVE: CVE-2020-14372
Signed-off-by: Marta Rybczynska <marta.rybczynska@huawei.com>
---
docs/grub.texi | 5 +++++
grub-core/commands/acpi.c | 15 ++++++++-------
2 files changed, 13 insertions(+), 7 deletions(-)
diff --git a/docs/grub.texi b/docs/grub.texi
index 0786427..47ac7ff 100644
--- a/docs/grub.texi
+++ b/docs/grub.texi
@@ -3986,6 +3986,11 @@ Normally, this command will replace the Root System Description Pointer
(RSDP) in the Extended BIOS Data Area to point to the new tables. If the
@option{--no-ebda} option is used, the new tables will be known only to
GRUB, but may be used by GRUB's EFI emulation.
+
+Note: The command is not allowed when lockdown is enforced (@pxref{Lockdown}).
+ Otherwise an attacker can instruct the GRUB to load an SSDT table to
+ overwrite the kernel lockdown configuration and later load and execute
+ unsigned code.
@end deffn
diff --git a/grub-core/commands/acpi.c b/grub-core/commands/acpi.c
index 5a1499a..1215f2a 100644
--- a/grub-core/commands/acpi.c
+++ b/grub-core/commands/acpi.c
@@ -27,6 +27,7 @@
#include <grub/mm.h>
#include <grub/memory.h>
#include <grub/i18n.h>
+#include <grub/lockdown.h>
#ifdef GRUB_MACHINE_EFI
#include <grub/efi/efi.h>
@@ -775,13 +776,13 @@ static grub_extcmd_t cmd;
GRUB_MOD_INIT(acpi)
{
- cmd = grub_register_extcmd ("acpi", grub_cmd_acpi, 0,
- N_("[-1|-2] [--exclude=TABLE1,TABLE2|"
- "--load-only=TABLE1,TABLE2] FILE1"
- " [FILE2] [...]"),
- N_("Load host ACPI tables and tables "
- "specified by arguments."),
- options);
+ cmd = grub_register_extcmd_lockdown ("acpi", grub_cmd_acpi, 0,
+ N_("[-1|-2] [--exclude=TABLE1,TABLE2|"
+ "--load-only=TABLE1,TABLE2] FILE1"
+ " [FILE2] [...]"),
+ N_("Load host ACPI tables and tables "
+ "specified by arguments."),
+ options);
}
GRUB_MOD_FINI(acpi)

View File

@@ -0,0 +1,130 @@
From fe7a13df6200bda934fcc0246458df249f1ef4f2 Mon Sep 17 00:00:00 2001
From: Marco A Benatto <mbenatto@redhat.com>
Date: Wed, 23 Sep 2020 11:33:33 -0400
Subject: [PATCH] verifiers: Move verifiers API to kernel image
Move verifiers API from a module to the kernel image, so it can be
used there as well. There are no functional changes in this patch.
Signed-off-by: Marco A Benatto <mbenatto@redhat.com>
Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
Upstream-Status: Backport [https://git.savannah.gnu.org/cgit/grub.git/commit/?id=9e95f45ceeef36fcf93cbfffcf004276883dbc99]
CVE: CVE-2020-14372
Signed-off-by: Marta Rybczynska <marta.rybczynska@huawei.com>
---
grub-core/Makefile.am | 1 +
grub-core/Makefile.core.def | 6 +-----
grub-core/kern/main.c | 4 ++++
grub-core/{commands => kern}/verifiers.c | 8 ++------
include/grub/verify.h | 9 ++++++---
5 files changed, 14 insertions(+), 14 deletions(-)
rename grub-core/{commands => kern}/verifiers.c (97%)
diff --git a/grub-core/Makefile.am b/grub-core/Makefile.am
index 3ea8e7f..375c30d 100644
--- a/grub-core/Makefile.am
+++ b/grub-core/Makefile.am
@@ -90,6 +90,7 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/parser.h
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/partition.h
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/term.h
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/time.h
+KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/verify.h
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/mm_private.h
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/net.h
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/memory.h
diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def
index 474a63e..cff02f2 100644
--- a/grub-core/Makefile.core.def
+++ b/grub-core/Makefile.core.def
@@ -140,6 +140,7 @@ kernel = {
common = kern/rescue_parser.c;
common = kern/rescue_reader.c;
common = kern/term.c;
+ common = kern/verifiers.c;
noemu = kern/compiler-rt.c;
noemu = kern/mm.c;
@@ -942,11 +943,6 @@ module = {
cppflags = '-I$(srcdir)/lib/posix_wrap';
};
-module = {
- name = verifiers;
- common = commands/verifiers.c;
-};
-
module = {
name = shim_lock;
common = commands/efi/shim_lock.c;
diff --git a/grub-core/kern/main.c b/grub-core/kern/main.c
index 9cad0c4..73967e2 100644
--- a/grub-core/kern/main.c
+++ b/grub-core/kern/main.c
@@ -29,6 +29,7 @@
#include <grub/command.h>
#include <grub/reader.h>
#include <grub/parser.h>
+#include <grub/verify.h>
#ifdef GRUB_MACHINE_PCBIOS
#include <grub/machine/memory.h>
@@ -274,6 +275,9 @@ grub_main (void)
grub_printf ("Welcome to GRUB!\n\n");
grub_setcolorstate (GRUB_TERM_COLOR_STANDARD);
+ /* Init verifiers API. */
+ grub_verifiers_init ();
+
grub_load_config ();
grub_boot_time ("Before loading embedded modules.");
diff --git a/grub-core/commands/verifiers.c b/grub-core/kern/verifiers.c
similarity index 97%
rename from grub-core/commands/verifiers.c
rename to grub-core/kern/verifiers.c
index 0dde481..aa3dc7c 100644
--- a/grub-core/commands/verifiers.c
+++ b/grub-core/kern/verifiers.c
@@ -217,12 +217,8 @@ grub_verify_string (char *str, enum grub_verify_string_type type)
return GRUB_ERR_NONE;
}
-GRUB_MOD_INIT(verifiers)
+void
+grub_verifiers_init (void)
{
grub_file_filter_register (GRUB_FILE_FILTER_VERIFY, grub_verifiers_open);
}
-
-GRUB_MOD_FINI(verifiers)
-{
- grub_file_filter_unregister (GRUB_FILE_FILTER_VERIFY);
-}
diff --git a/include/grub/verify.h b/include/grub/verify.h
index ea04914..cd129c3 100644
--- a/include/grub/verify.h
+++ b/include/grub/verify.h
@@ -64,7 +64,10 @@ struct grub_file_verifier
grub_err_t (*verify_string) (char *str, enum grub_verify_string_type type);
};
-extern struct grub_file_verifier *grub_file_verifiers;
+extern struct grub_file_verifier *EXPORT_VAR (grub_file_verifiers);
+
+extern void
+grub_verifiers_init (void);
static inline void
grub_verifier_register (struct grub_file_verifier *ver)
@@ -78,7 +81,7 @@ grub_verifier_unregister (struct grub_file_verifier *ver)
grub_list_remove (GRUB_AS_LIST (ver));
}
-grub_err_t
-grub_verify_string (char *str, enum grub_verify_string_type type);
+extern grub_err_t
+EXPORT_FUNC (grub_verify_string) (char *str, enum grub_verify_string_type type);
#endif /* ! GRUB_VERIFY_HEADER */

View File

@@ -0,0 +1,431 @@
From d8aac4517fef0f0188a60a2a8ff9cafdd9c7ca42 Mon Sep 17 00:00:00 2001
From: Javier Martinez Canillas <javierm@redhat.com>
Date: Mon, 28 Sep 2020 20:08:02 +0200
Subject: [PATCH] kern: Add lockdown support
When the GRUB starts on a secure boot platform, some commands can be
used to subvert the protections provided by the verification mechanism and
could lead to booting untrusted system.
To prevent that situation, allow GRUB to be locked down. That way the code
may check if GRUB has been locked down and further restrict the commands
that are registered or what subset of their functionality could be used.
The lockdown support adds the following components:
* The grub_lockdown() function which can be used to lockdown GRUB if,
e.g., UEFI Secure Boot is enabled.
* The grub_is_lockdown() function which can be used to check if the GRUB
was locked down.
* A verifier that flags OS kernels, the GRUB modules, Device Trees and ACPI
tables as GRUB_VERIFY_FLAGS_DEFER_AUTH to defer verification to other
verifiers. These files are only successfully verified if another registered
verifier returns success. Otherwise, the whole verification process fails.
For example, PE/COFF binaries verification can be done by the shim_lock
verifier which validates the signatures using the shim_lock protocol.
However, the verification is not deferred directly to the shim_lock verifier.
The shim_lock verifier is hooked into the verification process instead.
* A set of grub_{command,extcmd}_lockdown functions that can be used by
code registering command handlers, to only register unsafe commands if
the GRUB has not been locked down.
Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
Upstream-Status: Backport [https://git.savannah.gnu.org/cgit/grub.git/commit/?id=578c95298bcc46e0296f4c786db64c2ff26ce2cc]
CVE: CVE-2020-14372
Signed-off-by: Marta Rybczynska <marta.rybczynska@huawei.com>
---
conf/Makefile.common | 2 +
docs/grub-dev.texi | 27 +++++++++++++
docs/grub.texi | 8 ++++
grub-core/Makefile.am | 5 ++-
grub-core/Makefile.core.def | 1 +
grub-core/commands/extcmd.c | 23 +++++++++++
grub-core/kern/command.c | 24 +++++++++++
grub-core/kern/lockdown.c | 80 +++++++++++++++++++++++++++++++++++++
include/grub/command.h | 5 +++
include/grub/extcmd.h | 7 ++++
include/grub/lockdown.h | 44 ++++++++++++++++++++
11 files changed, 225 insertions(+), 1 deletion(-)
create mode 100644 grub-core/kern/lockdown.c
create mode 100644 include/grub/lockdown.h
diff --git a/conf/Makefile.common b/conf/Makefile.common
index 6cd71cb..2a1a886 100644
--- a/conf/Makefile.common
+++ b/conf/Makefile.common
@@ -84,7 +84,9 @@ CPPFLAGS_PARTTOOL_LIST = -Dgrub_parttool_register=PARTTOOL_LIST_MARKER
CPPFLAGS_TERMINAL_LIST = '-Dgrub_term_register_input(...)=INPUT_TERMINAL_LIST_MARKER(__VA_ARGS__)'
CPPFLAGS_TERMINAL_LIST += '-Dgrub_term_register_output(...)=OUTPUT_TERMINAL_LIST_MARKER(__VA_ARGS__)'
CPPFLAGS_COMMAND_LIST = '-Dgrub_register_command(...)=COMMAND_LIST_MARKER(__VA_ARGS__)'
+CPPFLAGS_COMMAND_LIST += '-Dgrub_register_command_lockdown(...)=COMMAND_LOCKDOWN_LIST_MARKER(__VA_ARGS__)'
CPPFLAGS_COMMAND_LIST += '-Dgrub_register_extcmd(...)=EXTCOMMAND_LIST_MARKER(__VA_ARGS__)'
+CPPFLAGS_COMMAND_LIST += '-Dgrub_register_extcmd_lockdown(...)=EXTCOMMAND_LOCKDOWN_LIST_MARKER(__VA_ARGS__)'
CPPFLAGS_COMMAND_LIST += '-Dgrub_register_command_p1(...)=P1COMMAND_LIST_MARKER(__VA_ARGS__)'
CPPFLAGS_FDT_LIST := '-Dgrub_fdtbus_register(...)=FDT_DRIVER_LIST_MARKER(__VA_ARGS__)'
CPPFLAGS_MARKER = $(CPPFLAGS_FS_LIST) $(CPPFLAGS_VIDEO_LIST) \
diff --git a/docs/grub-dev.texi b/docs/grub-dev.texi
index ee389fd..635ec72 100644
--- a/docs/grub-dev.texi
+++ b/docs/grub-dev.texi
@@ -86,6 +86,7 @@ This edition documents version @value{VERSION}.
* PFF2 Font File Format::
* Graphical Menu Software Design::
* Verifiers framework::
+* Lockdown framework::
* Copying This Manual:: Copying This Manual
* Index::
@end menu
@@ -2086,6 +2087,32 @@ Optionally at the end of the file @samp{fini}, if it exists, is called with just
the context. If you return no error during any of @samp{init}, @samp{write} and
@samp{fini} then the file is considered as having succeded verification.
+@node Lockdown framework
+@chapter Lockdown framework
+
+The GRUB can be locked down, which is a restricted mode where some operations
+are not allowed. For instance, some commands cannot be used when the GRUB is
+locked down.
+
+The function
+@code{grub_lockdown()} is used to lockdown GRUB and the function
+@code{grub_is_lockdown()} function can be used to check whether lockdown is
+enabled or not. When enabled, the function returns @samp{GRUB_LOCKDOWN_ENABLED}
+and @samp{GRUB_LOCKDOWN_DISABLED} when is not enabled.
+
+The following functions can be used to register the commands that can only be
+used when lockdown is disabled:
+
+@itemize
+
+@item @code{grub_cmd_lockdown()} registers command which should not run when the
+GRUB is in lockdown mode.
+
+@item @code{grub_cmd_lockdown()} registers extended command which should not run
+when the GRUB is in lockdown mode.
+
+@end itemize
+
@node Copying This Manual
@appendix Copying This Manual
diff --git a/docs/grub.texi b/docs/grub.texi
index 8779507..d778bfb 100644
--- a/docs/grub.texi
+++ b/docs/grub.texi
@@ -5581,6 +5581,7 @@ environment variables and commands are listed in the same order.
* Using digital signatures:: Booting digitally signed code
* UEFI secure boot and shim:: Booting digitally signed PE files
* Measured Boot:: Measuring boot components
+* Lockdown:: Lockdown when booting on a secure setup
@end menu
@node Authentication and authorisation
@@ -5794,6 +5795,13 @@ into @file{core.img} in order to avoid a potential gap in measurement between
Measured boot is currently only supported on EFI platforms.
+@node Lockdown
+@section Lockdown when booting on a secure setup
+
+The GRUB can be locked down when booted on a secure boot environment, for example
+if the UEFI secure boot is enabled. On a locked down configuration, the GRUB will
+be restricted and some operations/commands cannot be executed.
+
@node Platform limitations
@chapter Platform limitations
diff --git a/grub-core/Makefile.am b/grub-core/Makefile.am
index 375c30d..3096241 100644
--- a/grub-core/Makefile.am
+++ b/grub-core/Makefile.am
@@ -79,6 +79,7 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/fs.h
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i18n.h
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/kernel.h
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/list.h
+KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/lockdown.h
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/misc.h
if COND_emu
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/compiler-rt-emu.h
@@ -376,8 +377,10 @@ command.lst: $(MARKER_FILES)
b=`basename $$pp .marker`; \
sed -n \
-e "/EXTCOMMAND_LIST_MARKER *( *\"/{s/.*( *\"\([^\"]*\)\".*/*\1: $$b/;p;}" \
+ -e "/EXTCOMMAND_LOCKDOWN_LIST_MARKER *( *\"/{s/.*( *\"\([^\"]*\)\".*/*\1: $$b/;p;}" \
-e "/P1COMMAND_LIST_MARKER *( *\"/{s/.*( *\"\([^\"]*\)\".*/*\1: $$b/;p;}" \
- -e "/COMMAND_LIST_MARKER *( *\"/{s/.*( *\"\([^\"]*\)\".*/\1: $$b/;p;}" $$pp; \
+ -e "/COMMAND_LIST_MARKER *( *\"/{s/.*( *\"\([^\"]*\)\".*/\1: $$b/;p;}" \
+ -e "/COMMAND_LOCKDOWN_LIST_MARKER *( *\"/{s/.*( *\"\([^\"]*\)\".*/\1: $$b/;p;}" $$pp; \
done) | sort -u > $@
platform_DATA += command.lst
CLEANFILES += command.lst
diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def
index cff02f2..651ea2a 100644
--- a/grub-core/Makefile.core.def
+++ b/grub-core/Makefile.core.def
@@ -204,6 +204,7 @@ kernel = {
efi = term/efi/console.c;
efi = kern/acpi.c;
efi = kern/efi/acpi.c;
+ efi = kern/lockdown.c;
i386_coreboot = kern/i386/pc/acpi.c;
i386_multiboot = kern/i386/pc/acpi.c;
i386_coreboot = kern/acpi.c;
diff --git a/grub-core/commands/extcmd.c b/grub-core/commands/extcmd.c
index 69574e2..90a5ca2 100644
--- a/grub-core/commands/extcmd.c
+++ b/grub-core/commands/extcmd.c
@@ -19,6 +19,7 @@
#include <grub/mm.h>
#include <grub/list.h>
+#include <grub/lockdown.h>
#include <grub/misc.h>
#include <grub/extcmd.h>
#include <grub/script_sh.h>
@@ -110,6 +111,28 @@ grub_register_extcmd (const char *name, grub_extcmd_func_t func,
summary, description, parser, 1);
}
+static grub_err_t
+grub_extcmd_lockdown (grub_extcmd_context_t ctxt __attribute__ ((unused)),
+ int argc __attribute__ ((unused)),
+ char **argv __attribute__ ((unused)))
+{
+ return grub_error (GRUB_ERR_ACCESS_DENIED,
+ N_("%s: the command is not allowed when lockdown is enforced"),
+ ctxt->extcmd->cmd->name);
+}
+
+grub_extcmd_t
+grub_register_extcmd_lockdown (const char *name, grub_extcmd_func_t func,
+ grub_command_flags_t flags, const char *summary,
+ const char *description,
+ const struct grub_arg_option *parser)
+{
+ if (grub_is_lockdown () == GRUB_LOCKDOWN_ENABLED)
+ func = grub_extcmd_lockdown;
+
+ return grub_register_extcmd (name, func, flags, summary, description, parser);
+}
+
void
grub_unregister_extcmd (grub_extcmd_t ext)
{
diff --git a/grub-core/kern/command.c b/grub-core/kern/command.c
index acd7218..4aabcd4 100644
--- a/grub-core/kern/command.c
+++ b/grub-core/kern/command.c
@@ -17,6 +17,7 @@
* along with GRUB. If not, see <http://www.gnu.org/licenses/>.
*/
+#include <grub/lockdown.h>
#include <grub/mm.h>
#include <grub/command.h>
@@ -77,6 +78,29 @@ grub_register_command_prio (const char *name,
return cmd;
}
+static grub_err_t
+grub_cmd_lockdown (grub_command_t cmd __attribute__ ((unused)),
+ int argc __attribute__ ((unused)),
+ char **argv __attribute__ ((unused)))
+
+{
+ return grub_error (GRUB_ERR_ACCESS_DENIED,
+ N_("%s: the command is not allowed when lockdown is enforced"),
+ cmd->name);
+}
+
+grub_command_t
+grub_register_command_lockdown (const char *name,
+ grub_command_func_t func,
+ const char *summary,
+ const char *description)
+{
+ if (grub_is_lockdown () == GRUB_LOCKDOWN_ENABLED)
+ func = grub_cmd_lockdown;
+
+ return grub_register_command_prio (name, func, summary, description, 0);
+}
+
void
grub_unregister_command (grub_command_t cmd)
{
diff --git a/grub-core/kern/lockdown.c b/grub-core/kern/lockdown.c
new file mode 100644
index 0000000..1e56c0b
--- /dev/null
+++ b/grub-core/kern/lockdown.c
@@ -0,0 +1,80 @@
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 2020 Free Software Foundation, Inc.
+ *
+ * GRUB is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * GRUB is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GRUB. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <grub/dl.h>
+#include <grub/file.h>
+#include <grub/lockdown.h>
+#include <grub/verify.h>
+
+static int lockdown = GRUB_LOCKDOWN_DISABLED;
+
+static grub_err_t
+lockdown_verifier_init (grub_file_t io __attribute__ ((unused)),
+ enum grub_file_type type,
+ void **context __attribute__ ((unused)),
+ enum grub_verify_flags *flags)
+{
+ *flags = GRUB_VERIFY_FLAGS_SKIP_VERIFICATION;
+
+ switch (type & GRUB_FILE_TYPE_MASK)
+ {
+ case GRUB_FILE_TYPE_GRUB_MODULE:
+ case GRUB_FILE_TYPE_LINUX_KERNEL:
+ case GRUB_FILE_TYPE_MULTIBOOT_KERNEL:
+ case GRUB_FILE_TYPE_XEN_HYPERVISOR:
+ case GRUB_FILE_TYPE_BSD_KERNEL:
+ case GRUB_FILE_TYPE_XNU_KERNEL:
+ case GRUB_FILE_TYPE_PLAN9_KERNEL:
+ case GRUB_FILE_TYPE_NTLDR:
+ case GRUB_FILE_TYPE_TRUECRYPT:
+ case GRUB_FILE_TYPE_FREEDOS:
+ case GRUB_FILE_TYPE_PXECHAINLOADER:
+ case GRUB_FILE_TYPE_PCCHAINLOADER:
+ case GRUB_FILE_TYPE_COREBOOT_CHAINLOADER:
+ case GRUB_FILE_TYPE_EFI_CHAINLOADED_IMAGE:
+ case GRUB_FILE_TYPE_ACPI_TABLE:
+ case GRUB_FILE_TYPE_DEVICE_TREE_IMAGE:
+ *flags = GRUB_VERIFY_FLAGS_DEFER_AUTH;
+
+ /* Fall through. */
+
+ default:
+ return GRUB_ERR_NONE;
+ }
+}
+
+struct grub_file_verifier lockdown_verifier =
+ {
+ .name = "lockdown_verifier",
+ .init = lockdown_verifier_init,
+ };
+
+void
+grub_lockdown (void)
+{
+ lockdown = GRUB_LOCKDOWN_ENABLED;
+
+ grub_verifier_register (&lockdown_verifier);
+}
+
+int
+grub_is_lockdown (void)
+{
+ return lockdown;
+}
diff --git a/include/grub/command.h b/include/grub/command.h
index eee4e84..2a6f7f8 100644
--- a/include/grub/command.h
+++ b/include/grub/command.h
@@ -86,6 +86,11 @@ EXPORT_FUNC(grub_register_command_prio) (const char *name,
const char *summary,
const char *description,
int prio);
+grub_command_t
+EXPORT_FUNC(grub_register_command_lockdown) (const char *name,
+ grub_command_func_t func,
+ const char *summary,
+ const char *description);
void EXPORT_FUNC(grub_unregister_command) (grub_command_t cmd);
static inline grub_command_t
diff --git a/include/grub/extcmd.h b/include/grub/extcmd.h
index 19fe592..fe9248b 100644
--- a/include/grub/extcmd.h
+++ b/include/grub/extcmd.h
@@ -62,6 +62,13 @@ grub_extcmd_t EXPORT_FUNC(grub_register_extcmd) (const char *name,
const char *description,
const struct grub_arg_option *parser);
+grub_extcmd_t EXPORT_FUNC(grub_register_extcmd_lockdown) (const char *name,
+ grub_extcmd_func_t func,
+ grub_command_flags_t flags,
+ const char *summary,
+ const char *description,
+ const struct grub_arg_option *parser);
+
grub_extcmd_t EXPORT_FUNC(grub_register_extcmd_prio) (const char *name,
grub_extcmd_func_t func,
grub_command_flags_t flags,
diff --git a/include/grub/lockdown.h b/include/grub/lockdown.h
new file mode 100644
index 0000000..40531fa
--- /dev/null
+++ b/include/grub/lockdown.h
@@ -0,0 +1,44 @@
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 2020 Free Software Foundation, Inc.
+ *
+ * GRUB is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * GRUB is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GRUB. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef GRUB_LOCKDOWN_H
+#define GRUB_LOCKDOWN_H 1
+
+#include <grub/symbol.h>
+
+#define GRUB_LOCKDOWN_DISABLED 0
+#define GRUB_LOCKDOWN_ENABLED 1
+
+#ifdef GRUB_MACHINE_EFI
+extern void
+EXPORT_FUNC (grub_lockdown) (void);
+extern int
+EXPORT_FUNC (grub_is_lockdown) (void);
+#else
+static inline void
+grub_lockdown (void)
+{
+}
+
+static inline int
+grub_is_lockdown (void)
+{
+ return GRUB_LOCKDOWN_DISABLED;
+}
+#endif
+#endif /* ! GRUB_LOCKDOWN_H */

View File

@@ -0,0 +1,57 @@
From bfb9c44298aa202c176fef8dc5ea48f9b0e76e5e Mon Sep 17 00:00:00 2001
From: Javier Martinez Canillas <javierm@redhat.com>
Date: Tue, 2 Feb 2021 19:59:48 +0100
Subject: [PATCH] kern/lockdown: Set a variable if the GRUB is locked down
It may be useful for scripts to determine whether the GRUB is locked
down or not. Add the lockdown variable which is set to "y" when the GRUB
is locked down.
Suggested-by: Dimitri John Ledkov <xnox@ubuntu.com>
Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
Upstream-Status: Backport [https://git.savannah.gnu.org/cgit/grub.git/commit/?id=d90367471779c240e002e62edfb6b31fc85b4908]
CVE: CVE-2020-14372
Signed-off-by: Marta Rybczynska <marta.rybczynska@huawei.com>
---
docs/grub.texi | 3 +++
grub-core/kern/lockdown.c | 4 ++++
2 files changed, 7 insertions(+)
diff --git a/docs/grub.texi b/docs/grub.texi
index d778bfb..5e6cace 100644
--- a/docs/grub.texi
+++ b/docs/grub.texi
@@ -5802,6 +5802,9 @@ The GRUB can be locked down when booted on a secure boot environment, for exampl
if the UEFI secure boot is enabled. On a locked down configuration, the GRUB will
be restricted and some operations/commands cannot be executed.
+The @samp{lockdown} variable is set to @samp{y} when the GRUB is locked down.
+Otherwise it does not exit.
+
@node Platform limitations
@chapter Platform limitations
diff --git a/grub-core/kern/lockdown.c b/grub-core/kern/lockdown.c
index 1e56c0b..0bc70fd 100644
--- a/grub-core/kern/lockdown.c
+++ b/grub-core/kern/lockdown.c
@@ -18,6 +18,7 @@
*/
#include <grub/dl.h>
+#include <grub/env.h>
#include <grub/file.h>
#include <grub/lockdown.h>
#include <grub/verify.h>
@@ -71,6 +72,9 @@ grub_lockdown (void)
lockdown = GRUB_LOCKDOWN_ENABLED;
grub_verifier_register (&lockdown_verifier);
+
+ grub_env_set ("lockdown", "y");
+ grub_env_export ("lockdown");
}
int

View File

@@ -0,0 +1,52 @@
From 0d809c0979ced9db4d0e500b3e812bba95e52972 Mon Sep 17 00:00:00 2001
From: Javier Martinez Canillas <javierm@redhat.com>
Date: Mon, 28 Sep 2020 20:08:29 +0200
Subject: [PATCH] efi: Lockdown the GRUB when the UEFI Secure Boot is enabled
If the UEFI Secure Boot is enabled then the GRUB must be locked down
to prevent executing code that can potentially be used to subvert its
verification mechanisms.
Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
Upstream-Status: Backport [https://git.savannah.gnu.org/cgit/grub.git/commit/?id=98b00a403cbf2ba6833d1ac0499871b27a08eb77]
CVE: CVE-2020-14372
Signed-off-by: Marta Rybczynska <marta.rybczynska@huawei.com>
---
grub-core/kern/efi/init.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/grub-core/kern/efi/init.c b/grub-core/kern/efi/init.c
index 3dfdf2d..db84d82 100644
--- a/grub-core/kern/efi/init.c
+++ b/grub-core/kern/efi/init.c
@@ -20,6 +20,7 @@
#include <grub/efi/efi.h>
#include <grub/efi/console.h>
#include <grub/efi/disk.h>
+#include <grub/lockdown.h>
#include <grub/term.h>
#include <grub/misc.h>
#include <grub/env.h>
@@ -39,6 +40,20 @@ grub_efi_init (void)
/* Initialize the memory management system. */
grub_efi_mm_init ();
+ /*
+ * Lockdown the GRUB and register the shim_lock verifier
+ * if the UEFI Secure Boot is enabled.
+ */
+ if (grub_efi_secure_boot ())
+ {
+ grub_lockdown ();
+ /* NOTE: Our version does not have the shim_lock_verifier,
+ * need to update below if added */
+#if 0
+ grub_shim_lock_verifier_setup ();
+#endif
+ }
+
efi_call_4 (grub_efi_system_table->boot_services->set_watchdog_timer,
0, 0, 0, NULL);

View File

@@ -0,0 +1,158 @@
From 1ad728b08ba2a21573e5f81a565114f74ca33988 Mon Sep 17 00:00:00 2001
From: Javier Martinez Canillas <javierm@redhat.com>
Date: Mon, 28 Sep 2020 20:08:33 +0200
Subject: [PATCH] efi: Use grub_is_lockdown() instead of hardcoding a disabled
modules list
Now the GRUB can check if it has been locked down and this can be used to
prevent executing commands that can be utilized to circumvent the UEFI
Secure Boot mechanisms. So, instead of hardcoding a list of modules that
have to be disabled, prevent the usage of commands that can be dangerous.
This not only allows the commands to be disabled on other platforms, but
also properly separate the concerns. Since the shim_lock verifier logic
should be only about preventing to run untrusted binaries and not about
defining these kind of policies.
Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
Upstream-Status: Backport [https://git.savannah.gnu.org/cgit/grub.git/commit/?id=8f73052885892bc0dbc01e297f79d7cf4925e491]
CVE: CVE-2020-14372
Signed-off-by: Marta Rybczynska <marta.rybczynska@huawei.com>
---
docs/grub.texi | 10 ++++++++++
grub-core/commands/i386/wrmsr.c | 5 +++--
grub-core/commands/iorw.c | 19 ++++++++++---------
grub-core/commands/memrw.c | 19 ++++++++++---------
4 files changed, 33 insertions(+), 20 deletions(-)
diff --git a/docs/grub.texi b/docs/grub.texi
index 5e6cace..0786427 100644
--- a/docs/grub.texi
+++ b/docs/grub.texi
@@ -5256,6 +5256,9 @@ only applies to the particular cpu/core/thread that runs the command.
Also, if you specify a reserved or unimplemented MSR address, it will
cause a general protection exception (which is not currently being handled)
and the system will reboot.
+
+Note: The command is not allowed when lockdown is enforced (@pxref{Lockdown}).
+ This is done to prevent subverting various security mechanisms.
@end deffn
@node xen_hypervisor
@@ -5758,6 +5761,13 @@ security reasons. All above mentioned requirements are enforced by the
shim_lock module. And itself it is a persistent module which means that
it cannot be unloaded if it was loaded into the memory.
+All GRUB modules not stored in the @file{core.img}, OS kernels, ACPI tables,
+Device Trees, etc. have to be signed, e.g, using PGP. Additionally, the commands
+that can be used to subvert the UEFI secure boot mechanism, such as @command{iorw}
+and @command{memrw} will not be available when the UEFI secure boot is enabled.
+This is done for security reasons and are enforced by the GRUB Lockdown mechanism
+(@pxref{Lockdown}).
+
@node Measured Boot
@section Measuring boot components
diff --git a/grub-core/commands/i386/wrmsr.c b/grub-core/commands/i386/wrmsr.c
index 9c5e510..56a29c2 100644
--- a/grub-core/commands/i386/wrmsr.c
+++ b/grub-core/commands/i386/wrmsr.c
@@ -24,6 +24,7 @@
#include <grub/env.h>
#include <grub/command.h>
#include <grub/extcmd.h>
+#include <grub/lockdown.h>
#include <grub/i18n.h>
#include <grub/i386/cpuid.h>
#include <grub/i386/wrmsr.h>
@@ -83,8 +84,8 @@ grub_cmd_msr_write (grub_command_t cmd __attribute__ ((unused)), int argc, char
GRUB_MOD_INIT(wrmsr)
{
- cmd_write = grub_register_command ("wrmsr", grub_cmd_msr_write, N_("ADDR VALUE"),
- N_("Write a value to a CPU model specific register."));
+ cmd_write = grub_register_command_lockdown ("wrmsr", grub_cmd_msr_write, N_("ADDR VALUE"),
+ N_("Write a value to a CPU model specific register."));
}
GRUB_MOD_FINI(wrmsr)
diff --git a/grub-core/commands/iorw.c b/grub-core/commands/iorw.c
index a0c164e..584baec 100644
--- a/grub-core/commands/iorw.c
+++ b/grub-core/commands/iorw.c
@@ -23,6 +23,7 @@
#include <grub/env.h>
#include <grub/cpu/io.h>
#include <grub/i18n.h>
+#include <grub/lockdown.h>
GRUB_MOD_LICENSE ("GPLv3+");
@@ -131,17 +132,17 @@ GRUB_MOD_INIT(memrw)
N_("PORT"), N_("Read 32-bit value from PORT."),
options);
cmd_write_byte =
- grub_register_command ("outb", grub_cmd_write,
- N_("PORT VALUE [MASK]"),
- N_("Write 8-bit VALUE to PORT."));
+ grub_register_command_lockdown ("outb", grub_cmd_write,
+ N_("PORT VALUE [MASK]"),
+ N_("Write 8-bit VALUE to PORT."));
cmd_write_word =
- grub_register_command ("outw", grub_cmd_write,
- N_("PORT VALUE [MASK]"),
- N_("Write 16-bit VALUE to PORT."));
+ grub_register_command_lockdown ("outw", grub_cmd_write,
+ N_("PORT VALUE [MASK]"),
+ N_("Write 16-bit VALUE to PORT."));
cmd_write_dword =
- grub_register_command ("outl", grub_cmd_write,
- N_("ADDR VALUE [MASK]"),
- N_("Write 32-bit VALUE to PORT."));
+ grub_register_command_lockdown ("outl", grub_cmd_write,
+ N_("ADDR VALUE [MASK]"),
+ N_("Write 32-bit VALUE to PORT."));
}
GRUB_MOD_FINI(memrw)
diff --git a/grub-core/commands/memrw.c b/grub-core/commands/memrw.c
index 98769ea..d401a6d 100644
--- a/grub-core/commands/memrw.c
+++ b/grub-core/commands/memrw.c
@@ -22,6 +22,7 @@
#include <grub/extcmd.h>
#include <grub/env.h>
#include <grub/i18n.h>
+#include <grub/lockdown.h>
GRUB_MOD_LICENSE ("GPLv3+");
@@ -133,17 +134,17 @@ GRUB_MOD_INIT(memrw)
N_("ADDR"), N_("Read 32-bit value from ADDR."),
options);
cmd_write_byte =
- grub_register_command ("write_byte", grub_cmd_write,
- N_("ADDR VALUE [MASK]"),
- N_("Write 8-bit VALUE to ADDR."));
+ grub_register_command_lockdown ("write_byte", grub_cmd_write,
+ N_("ADDR VALUE [MASK]"),
+ N_("Write 8-bit VALUE to ADDR."));
cmd_write_word =
- grub_register_command ("write_word", grub_cmd_write,
- N_("ADDR VALUE [MASK]"),
- N_("Write 16-bit VALUE to ADDR."));
+ grub_register_command_lockdown ("write_word", grub_cmd_write,
+ N_("ADDR VALUE [MASK]"),
+ N_("Write 16-bit VALUE to ADDR."));
cmd_write_dword =
- grub_register_command ("write_dword", grub_cmd_write,
- N_("ADDR VALUE [MASK]"),
- N_("Write 32-bit VALUE to ADDR."));
+ grub_register_command_lockdown ("write_dword", grub_cmd_write,
+ N_("ADDR VALUE [MASK]"),
+ N_("Write 32-bit VALUE to ADDR."));
}
GRUB_MOD_FINI(memrw)

View File

@@ -0,0 +1,70 @@
From 584263eca1546e5cab69ba6fe7b4b07df2630a21 Mon Sep 17 00:00:00 2001
From: Javier Martinez Canillas <javierm@redhat.com>
Date: Wed, 14 Oct 2020 16:33:42 +0200
Subject: [PATCH] mmap: Don't register cutmem and badram commands when lockdown
is enforced
The cutmem and badram commands can be used to remove EFI memory regions
and potentially disable the UEFI Secure Boot. Prevent the commands to be
registered if the GRUB is locked down.
Fixes: CVE-2020-27779
Reported-by: Teddy Reed <teddy.reed@gmail.com>
Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
Upstream-Status: Backport [https://git.savannah.gnu.org/cgit/grub.git/commit/?id=d298b41f90cbf1f2e5a10e29daa1fc92ddee52c9]
CVE: CVE-2020-27779
Signed-off-by: Marta Rybczynska <marta.rybczynska@huawei.com>
---
docs/grub.texi | 4 ++++
grub-core/mmap/mmap.c | 13 +++++++------
2 files changed, 11 insertions(+), 6 deletions(-)
diff --git a/docs/grub.texi b/docs/grub.texi
index 47ac7ff..a1aaee6 100644
--- a/docs/grub.texi
+++ b/docs/grub.texi
@@ -4051,6 +4051,10 @@ this page is to be filtered. This syntax makes it easy to represent patterns
that are often result of memory damage, due to physical distribution of memory
cells.
+Note: The command is not allowed when lockdown is enforced (@pxref{Lockdown}).
+ This prevents removing EFI memory regions to potentially subvert the
+ security mechanisms provided by the UEFI secure boot.
+
@node blocklist
@subsection blocklist
diff --git a/grub-core/mmap/mmap.c b/grub-core/mmap/mmap.c
index 57b4e9a..7ebf32e 100644
--- a/grub-core/mmap/mmap.c
+++ b/grub-core/mmap/mmap.c
@@ -20,6 +20,7 @@
#include <grub/memory.h>
#include <grub/machine/memory.h>
#include <grub/err.h>
+#include <grub/lockdown.h>
#include <grub/misc.h>
#include <grub/mm.h>
#include <grub/command.h>
@@ -534,12 +535,12 @@ static grub_command_t cmd, cmd_cut;
GRUB_MOD_INIT(mmap)
{
- cmd = grub_register_command ("badram", grub_cmd_badram,
- N_("ADDR1,MASK1[,ADDR2,MASK2[,...]]"),
- N_("Declare memory regions as faulty (badram)."));
- cmd_cut = grub_register_command ("cutmem", grub_cmd_cutmem,
- N_("FROM[K|M|G] TO[K|M|G]"),
- N_("Remove any memory regions in specified range."));
+ cmd = grub_register_command_lockdown ("badram", grub_cmd_badram,
+ N_("ADDR1,MASK1[,ADDR2,MASK2[,...]]"),
+ N_("Declare memory regions as faulty (badram)."));
+ cmd_cut = grub_register_command_lockdown ("cutmem", grub_cmd_cutmem,
+ N_("FROM[K|M|G] TO[K|M|G]"),
+ N_("Remove any memory regions in specified range."));
}

View File

@@ -0,0 +1,105 @@
From 4ff1dfdf8c4c71bf4b0dd0488d9fa40ff2617f41 Mon Sep 17 00:00:00 2001
From: Javier Martinez Canillas <javierm@redhat.com>
Date: Wed, 24 Feb 2021 09:00:05 +0100
Subject: [PATCH] commands: Restrict commands that can load BIOS or DT blobs
when locked down
There are some more commands that should be restricted when the GRUB is
locked down. Following is the list of commands and reasons to restrict:
* fakebios: creates BIOS-like structures for backward compatibility with
existing OSes. This should not be allowed when locked down.
* loadbios: reads a BIOS dump from storage and loads it. This action
should not be allowed when locked down.
* devicetree: loads a Device Tree blob and passes it to the OS. It replaces
any Device Tree provided by the firmware. This also should
not be allowed when locked down.
Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
Upstream-Status: Backport [https://git.savannah.gnu.org/cgit/grub.git/commit/?id=468a5699b249fe6816b4e7e86c5dc9d325c9b09e]
CVE: CVE-2020-27779
Signed-off-by: Marta Rybczynska <marta.rybczynska@huawei.com>
---
docs/grub.texi | 3 +++
grub-core/commands/efi/loadbios.c | 16 ++++++++--------
grub-core/loader/arm/linux.c | 6 +++---
grub-core/loader/efi/fdt.c | 4 ++--
4 files changed, 16 insertions(+), 13 deletions(-)
diff --git a/docs/grub.texi b/docs/grub.texi
index a1aaee6..ccf1908 100644
--- a/docs/grub.texi
+++ b/docs/grub.texi
@@ -4236,6 +4236,9 @@ Load a device tree blob (.dtb) from a filesystem, for later use by a Linux
kernel. Does not perform merging with any device tree supplied by firmware,
but rather replaces it completely.
@ref{GNU/Linux}.
+
+Note: The command is not allowed when lockdown is enforced (@pxref{Lockdown}).
+ This is done to prevent subverting various security mechanisms.
@end deffn
@node distrust
diff --git a/grub-core/commands/efi/loadbios.c b/grub-core/commands/efi/loadbios.c
index d41d521..5c7725f 100644
--- a/grub-core/commands/efi/loadbios.c
+++ b/grub-core/commands/efi/loadbios.c
@@ -205,14 +205,14 @@ static grub_command_t cmd_fakebios, cmd_loadbios;
GRUB_MOD_INIT(loadbios)
{
- cmd_fakebios = grub_register_command ("fakebios", grub_cmd_fakebios,
- 0, N_("Create BIOS-like structures for"
- " backward compatibility with"
- " existing OS."));
-
- cmd_loadbios = grub_register_command ("loadbios", grub_cmd_loadbios,
- N_("BIOS_DUMP [INT10_DUMP]"),
- N_("Load BIOS dump."));
+ cmd_fakebios = grub_register_command_lockdown ("fakebios", grub_cmd_fakebios,
+ 0, N_("Create BIOS-like structures for"
+ " backward compatibility with"
+ " existing OS."));
+
+ cmd_loadbios = grub_register_command_lockdown ("loadbios", grub_cmd_loadbios,
+ N_("BIOS_DUMP [INT10_DUMP]"),
+ N_("Load BIOS dump."));
}
GRUB_MOD_FINI(loadbios)
diff --git a/grub-core/loader/arm/linux.c b/grub-core/loader/arm/linux.c
index d70c174..ed23dc7 100644
--- a/grub-core/loader/arm/linux.c
+++ b/grub-core/loader/arm/linux.c
@@ -493,9 +493,9 @@ GRUB_MOD_INIT (linux)
0, N_("Load Linux."));
cmd_initrd = grub_register_command ("initrd", grub_cmd_initrd,
0, N_("Load initrd."));
- cmd_devicetree = grub_register_command ("devicetree", grub_cmd_devicetree,
- /* TRANSLATORS: DTB stands for device tree blob. */
- 0, N_("Load DTB file."));
+ cmd_devicetree = grub_register_command_lockdown ("devicetree", grub_cmd_devicetree,
+ /* TRANSLATORS: DTB stands for device tree blob. */
+ 0, N_("Load DTB file."));
my_mod = mod;
current_fdt = (const void *) grub_arm_firmware_get_boot_data ();
machine_type = grub_arm_firmware_get_machine_type ();
diff --git a/grub-core/loader/efi/fdt.c b/grub-core/loader/efi/fdt.c
index ee9c559..003d07c 100644
--- a/grub-core/loader/efi/fdt.c
+++ b/grub-core/loader/efi/fdt.c
@@ -165,8 +165,8 @@ static grub_command_t cmd_devicetree;
GRUB_MOD_INIT (fdt)
{
cmd_devicetree =
- grub_register_command ("devicetree", grub_cmd_devicetree, 0,
- N_("Load DTB file."));
+ grub_register_command_lockdown ("devicetree", grub_cmd_devicetree, 0,
+ N_("Load DTB file."));
}
GRUB_MOD_FINI (fdt)

View File

@@ -0,0 +1,37 @@
From e4f5c16f76e137b3beb6b61a6d2435e54fcb495c Mon Sep 17 00:00:00 2001
From: Javier Martinez Canillas <javierm@redhat.com>
Date: Wed, 24 Feb 2021 22:59:59 +0100
Subject: [PATCH] commands/setpci: Restrict setpci command when locked down
This command can set PCI devices register values, which makes it dangerous
in a locked down configuration. Restrict it so can't be used on this setup.
Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
Upstream-Status: Backport [https://git.savannah.gnu.org/cgit/grub.git/commit/?id=58b77d4069823b44c5fa916fa8ddfc9c4cd51e02]
CVE: CVE-2020-27779
Signed-off-by: Marta Rybczynska <marta.rybczynska@huawei.com>
---
grub-core/commands/setpci.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/grub-core/commands/setpci.c b/grub-core/commands/setpci.c
index d5bc97d..fa2ba7d 100644
--- a/grub-core/commands/setpci.c
+++ b/grub-core/commands/setpci.c
@@ -329,10 +329,10 @@ static grub_extcmd_t cmd;
GRUB_MOD_INIT(setpci)
{
- cmd = grub_register_extcmd ("setpci", grub_cmd_setpci, 0,
- N_("[-s POSITION] [-d DEVICE] [-v VAR] "
- "REGISTER[=VALUE[:MASK]]"),
- N_("Manipulate PCI devices."), options);
+ cmd = grub_register_extcmd_lockdown ("setpci", grub_cmd_setpci, 0,
+ N_("[-s POSITION] [-d DEVICE] [-v VAR] "
+ "REGISTER[=VALUE[:MASK]]"),
+ N_("Manipulate PCI devices."), options);
}
GRUB_MOD_FINI(setpci)

View File

@@ -0,0 +1,35 @@
From 7949671de268ba3116d113778e5d770574e9f9e3 Mon Sep 17 00:00:00 2001
From: Javier Martinez Canillas <javierm@redhat.com>
Date: Wed, 24 Feb 2021 12:59:29 +0100
Subject: [PATCH] commands/hdparm: Restrict hdparm command when locked down
The command can be used to get/set ATA disk parameters. Some of these can
be dangerous since change the disk behavior. Restrict it when locked down.
Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
Upstream-Status: Backport [https://git.savannah.gnu.org/cgit/grub.git/commit/?id=5c97492a29c6063567b65ed1a069f5e6f4e211f0]
CVE: CVE-2020-27779
Signed-off-by: Marta Rybczynska <marta.rybczynska@huawei.com>
---
grub-core/commands/hdparm.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/grub-core/commands/hdparm.c b/grub-core/commands/hdparm.c
index d3fa966..2e2319e 100644
--- a/grub-core/commands/hdparm.c
+++ b/grub-core/commands/hdparm.c
@@ -436,9 +436,9 @@ static grub_extcmd_t cmd;
GRUB_MOD_INIT(hdparm)
{
- cmd = grub_register_extcmd ("hdparm", grub_cmd_hdparm, 0,
- N_("[OPTIONS] DISK"),
- N_("Get/set ATA disk parameters."), options);
+ cmd = grub_register_extcmd_lockdown ("hdparm", grub_cmd_hdparm, 0,
+ N_("[OPTIONS] DISK"),
+ N_("Get/set ATA disk parameters."), options);
}
GRUB_MOD_FINI(hdparm)

View File

@@ -0,0 +1,62 @@
From 6993cce7c3a9d15e6573845f455d2f0de424a717 Mon Sep 17 00:00:00 2001
From: Javier Martinez Canillas <javierm@redhat.com>
Date: Wed, 24 Feb 2021 15:03:26 +0100
Subject: [PATCH] gdb: Restrict GDB access when locked down
The gdbstub* commands allow to start and control a GDB stub running on
local host that can be used to connect from a remote debugger. Restrict
this functionality when the GRUB is locked down.
Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
Upstream-Status: Backport [https://git.savannah.gnu.org/cgit/grub.git/commit/?id=508270838998f151a82e9c13e7cb8a470a2dc23d]
CVE: CVE-2020-27779
Signed-off-by: Marta Rybczynska <marta.rybczynska@huawei.com>
---
grub-core/gdb/gdb.c | 32 ++++++++++++++++++--------------
1 file changed, 18 insertions(+), 14 deletions(-)
diff --git a/grub-core/gdb/gdb.c b/grub-core/gdb/gdb.c
index 847a1e1..1818cb6 100644
--- a/grub-core/gdb/gdb.c
+++ b/grub-core/gdb/gdb.c
@@ -75,20 +75,24 @@ static grub_command_t cmd, cmd_stop, cmd_break;
GRUB_MOD_INIT (gdb)
{
grub_gdb_idtinit ();
- cmd = grub_register_command ("gdbstub", grub_cmd_gdbstub,
- N_("PORT"),
- /* TRANSLATORS: GDB stub is a small part of
- GDB functionality running on local host
- which allows remote debugger to
- connect to it. */
- N_("Start GDB stub on given port"));
- cmd_break = grub_register_command ("gdbstub_break", grub_cmd_gdb_break,
- /* TRANSLATORS: this refers to triggering
- a breakpoint so that the user will land
- into GDB. */
- 0, N_("Break into GDB"));
- cmd_stop = grub_register_command ("gdbstub_stop", grub_cmd_gdbstop,
- 0, N_("Stop GDB stub"));
+ cmd = grub_register_command_lockdown ("gdbstub", grub_cmd_gdbstub,
+ N_("PORT"),
+ /*
+ * TRANSLATORS: GDB stub is a small part of
+ * GDB functionality running on local host
+ * which allows remote debugger to
+ * connect to it.
+ */
+ N_("Start GDB stub on given port"));
+ cmd_break = grub_register_command_lockdown ("gdbstub_break", grub_cmd_gdb_break,
+ /*
+ * TRANSLATORS: this refers to triggering
+ * a breakpoint so that the user will land
+ * into GDB.
+ */
+ 0, N_("Break into GDB"));
+ cmd_stop = grub_register_command_lockdown ("gdbstub_stop", grub_cmd_gdbstop,
+ 0, N_("Stop GDB stub"));
}
GRUB_MOD_FINI (gdb)

View File

@@ -0,0 +1,61 @@
From 73f214761cff76a18a2a867976bdd3a9adb00b67 Mon Sep 17 00:00:00 2001
From: Javier Martinez Canillas <javierm@redhat.com>
Date: Wed, 24 Feb 2021 14:44:38 +0100
Subject: [PATCH] loader/xnu: Don't allow loading extension and packages when
locked down
The shim_lock verifier validates the XNU kernels but no its extensions
and packages. Prevent these to be loaded when the GRUB is locked down.
Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
Upstream-Status: Backport [https://git.savannah.gnu.org/cgit/grub.git/commit/?id=9c5565135f12400a925ee901b25984e7af4442f5]
CVE: CVE-2020-27779
Signed-off-by: Marta Rybczynska <marta.rybczynska@huawei.com>
---
grub-core/loader/xnu.c | 31 +++++++++++++++++--------------
1 file changed, 17 insertions(+), 14 deletions(-)
diff --git a/grub-core/loader/xnu.c b/grub-core/loader/xnu.c
index 77d7060..07232d2 100644
--- a/grub-core/loader/xnu.c
+++ b/grub-core/loader/xnu.c
@@ -1482,20 +1482,23 @@ GRUB_MOD_INIT(xnu)
N_("Load XNU image."));
cmd_kernel64 = grub_register_command ("xnu_kernel64", grub_cmd_xnu_kernel64,
0, N_("Load 64-bit XNU image."));
- cmd_mkext = grub_register_command ("xnu_mkext", grub_cmd_xnu_mkext, 0,
- N_("Load XNU extension package."));
- cmd_kext = grub_register_command ("xnu_kext", grub_cmd_xnu_kext, 0,
- N_("Load XNU extension."));
- cmd_kextdir = grub_register_command ("xnu_kextdir", grub_cmd_xnu_kextdir,
- /* TRANSLATORS: OSBundleRequired is a
- variable name in xnu extensions
- manifests. It behaves mostly like
- GNU/Linux runlevels.
- */
- N_("DIRECTORY [OSBundleRequired]"),
- /* TRANSLATORS: There are many extensions
- in extension directory. */
- N_("Load XNU extension directory."));
+ cmd_mkext = grub_register_command_lockdown ("xnu_mkext", grub_cmd_xnu_mkext, 0,
+ N_("Load XNU extension package."));
+ cmd_kext = grub_register_command_lockdown ("xnu_kext", grub_cmd_xnu_kext, 0,
+ N_("Load XNU extension."));
+ cmd_kextdir = grub_register_command_lockdown ("xnu_kextdir", grub_cmd_xnu_kextdir,
+ /*
+ * TRANSLATORS: OSBundleRequired is
+ * a variable name in xnu extensions
+ * manifests. It behaves mostly like
+ * GNU/Linux runlevels.
+ */
+ N_("DIRECTORY [OSBundleRequired]"),
+ /*
+ * TRANSLATORS: There are many extensions
+ * in extension directory.
+ */
+ N_("Load XNU extension directory."));
cmd_ramdisk = grub_register_command ("xnu_ramdisk", grub_cmd_xnu_ramdisk, 0,
/* TRANSLATORS: ramdisk here isn't identifier. It can be translated. */
N_("Load XNU ramdisk. "

View File

@@ -0,0 +1,65 @@
From dcc5a434e59f721b03cc809db0375a24aa2ac6d0 Mon Sep 17 00:00:00 2001
From: Javier Martinez Canillas <javierm@redhat.com>
Date: Sat, 7 Nov 2020 01:03:18 +0100
Subject: [PATCH] docs: Document the cutmem command
The command is not present in the docs/grub.texi user documentation.
Reported-by: Daniel Kiper <daniel.kiper@oracle.com>
Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
Signed-off-by: Daniel Kiper <daniel.kiper@oracle.com>
Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
Upstream-Status: Backport [https://git.savannah.gnu.org/cgit/grub.git/commit/?id=f05e79a0143beb2d9a482a3ebf4fe0ce76778122]
CVE: CVE-2020-27779
Signed-off-by: Marta Rybczynska <marta.rybczynska@huawei.com>
---
docs/grub.texi | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)
diff --git a/docs/grub.texi b/docs/grub.texi
index ccf1908..ae85f55 100644
--- a/docs/grub.texi
+++ b/docs/grub.texi
@@ -3892,6 +3892,7 @@ you forget a command, you can run the command @command{help}
* cpuid:: Check for CPU features
* crc:: Compute or check CRC32 checksums
* cryptomount:: Mount a crypto device
+* cutmem:: Remove memory regions
* date:: Display or set current date and time
* devicetree:: Load a device tree blob
* distrust:: Remove a pubkey from trusted keys
@@ -4051,6 +4052,8 @@ this page is to be filtered. This syntax makes it easy to represent patterns
that are often result of memory damage, due to physical distribution of memory
cells.
+The command is similar to @command{cutmem} command.
+
Note: The command is not allowed when lockdown is enforced (@pxref{Lockdown}).
This prevents removing EFI memory regions to potentially subvert the
security mechanisms provided by the UEFI secure boot.
@@ -4214,6 +4217,24 @@ GRUB suports devices encrypted using LUKS and geli. Note that necessary modules
be used.
@end deffn
+@node cutmem
+@subsection cutmem
+
+@deffn Command cutmem from[K|M|G] to[K|M|G]
+Remove any memory regions in specified range.
+@end deffn
+
+This command notifies the memory manager that specified regions of RAM ought to
+be filtered out. This remains in effect after a payload kernel has been loaded
+by GRUB, as long as the loaded kernel obtains its memory map from GRUB. Kernels
+that support this include Linux, GNU Mach, the kernel of FreeBSD and Multiboot
+kernels in general.
+
+The command is similar to @command{badram} command.
+
+Note: The command is not allowed when lockdown is enforced (@pxref{Lockdown}).
+ This prevents removing EFI memory regions to potentially subvert the
+ security mechanisms provided by the UEFI secure boot.
@node date
@subsection date

View File

@@ -0,0 +1,107 @@
From b5a6aa7d77439bfeb75f200abffe15c6f685c907 Mon Sep 17 00:00:00 2001
From: Matthew Garrett <mjg@redhat.com>
Date: Mon, 13 Jan 2014 12:13:09 +0000
Subject: Don't permit loading modules on UEFI secure boot
Author: Colin Watson <cjwatson@ubuntu.com>
Origin: vendor, http://pkgs.fedoraproject.org/cgit/grub2.git/tree/grub-2.00-no-insmod-on-sb.patch
Forwarded: no
Last-Update: 2013-12-25
Patch-Name: no-insmod-on-sb.patch
Upstream-Status: Inappropriate [other, https://salsa.debian.org/grub-team/grub/-/blob/debian/2.04-20/debian/patches/no-insmod-on-sb.patch]
Backport of a Debian (and Fedora) patch implementing a way to get secure boot status
for CVE-2020-14372_4.patch. The upstream solution has too many dependencies to backport.
Source: https://salsa.debian.org/grub-team/grub/-/blob/debian/2.04-20/debian/patches/no-insmod-on-sb.patch
Signed-off-by: Marta Rybczynska <marta.rybczynska@huawei.com>
---
grub-core/kern/dl.c | 13 +++++++++++++
grub-core/kern/efi/efi.c | 28 ++++++++++++++++++++++++++++
include/grub/efi/efi.h | 1 +
3 files changed, 42 insertions(+)
diff --git a/grub-core/kern/dl.c b/grub-core/kern/dl.c
index 48eb5e7b6..074dfc3c6 100644
--- a/grub-core/kern/dl.c
+++ b/grub-core/kern/dl.c
@@ -38,6 +38,10 @@
#define GRUB_MODULES_MACHINE_READONLY
#endif
+#ifdef GRUB_MACHINE_EFI
+#include <grub/efi/efi.h>
+#endif
+
#pragma GCC diagnostic ignored "-Wcast-align"
@@ -686,6 +690,15 @@ grub_dl_load_file (const char *filename)
void *core = 0;
grub_dl_t mod = 0;
+#ifdef GRUB_MACHINE_EFI
+ if (grub_efi_secure_boot ())
+ {
+ grub_error (GRUB_ERR_ACCESS_DENIED,
+ "Secure Boot forbids loading module from %s", filename);
+ return 0;
+ }
+#endif
+
grub_boot_time ("Loading module %s", filename);
file = grub_file_open (filename, GRUB_FILE_TYPE_GRUB_MODULE);
diff --git a/grub-core/kern/efi/efi.c b/grub-core/kern/efi/efi.c
index 6e1ceb905..96204e39b 100644
--- a/grub-core/kern/efi/efi.c
+++ b/grub-core/kern/efi/efi.c
@@ -273,6 +273,34 @@ grub_efi_get_variable (const char *var, const grub_efi_guid_t *guid,
return NULL;
}
+grub_efi_boolean_t
+grub_efi_secure_boot (void)
+{
+ grub_efi_guid_t efi_var_guid = GRUB_EFI_GLOBAL_VARIABLE_GUID;
+ grub_size_t datasize;
+ char *secure_boot = NULL;
+ char *setup_mode = NULL;
+ grub_efi_boolean_t ret = 0;
+
+ secure_boot = grub_efi_get_variable ("SecureBoot", &efi_var_guid, &datasize);
+
+ if (datasize != 1 || !secure_boot)
+ goto out;
+
+ setup_mode = grub_efi_get_variable ("SetupMode", &efi_var_guid, &datasize);
+
+ if (datasize != 1 || !setup_mode)
+ goto out;
+
+ if (*secure_boot && !*setup_mode)
+ ret = 1;
+
+ out:
+ grub_free (secure_boot);
+ grub_free (setup_mode);
+ return ret;
+}
+
#pragma GCC diagnostic ignored "-Wcast-align"
/* Search the mods section from the PE32/PE32+ image. This code uses
diff --git a/include/grub/efi/efi.h b/include/grub/efi/efi.h
index e90e00dc4..a237952b3 100644
--- a/include/grub/efi/efi.h
+++ b/include/grub/efi/efi.h
@@ -82,6 +82,7 @@ EXPORT_FUNC (grub_efi_set_variable) (const char *var,
const grub_efi_guid_t *guid,
void *data,
grub_size_t datasize);
+grub_efi_boolean_t EXPORT_FUNC (grub_efi_secure_boot) (void);
int
EXPORT_FUNC (grub_efi_compare_device_paths) (const grub_efi_device_path_t *dp1,
const grub_efi_device_path_t *dp2);

View File

@@ -31,6 +31,20 @@ SRC_URI = "${GNU_MIRROR}/grub/grub-${PV}.tar.gz \
file://CVE-2020-15706-script-Avoid-a-use-after-free-when-redefining-a-func.patch \
file://CVE-2020-15707-linux-Fix-integer-overflows-in-initrd-size-handling.patch \
file://determinism.patch \
file://no-insmod-on-sb.patch \
file://CVE-2020-14372_1.patch \
file://CVE-2020-14372_2.patch \
file://CVE-2020-14372_3.patch \
file://CVE-2020-14372_4.patch \
file://CVE-2020-14372_5.patch \
file://CVE-2020-14372.patch \
file://CVE-2020-27779.patch \
file://CVE-2020-27779_2.patch \
file://CVE-2020-27779_3.patch \
file://CVE-2020-27779_4.patch \
file://CVE-2020-27779_5.patch \
file://CVE-2020-27779_6.patch \
file://CVE-2020-27779_7.patch \
"
SRC_URI[md5sum] = "5ce674ca6b2612d8939b9e6abed32934"
SRC_URI[sha256sum] = "f10c85ae3e204dbaec39ae22fa3c5e99f0665417e91c2cb49b7e5031658ba6ea"

View File

@@ -0,0 +1,36 @@
From ecdcf0df6c28c65ca6d1e5638726e13e373c76c5 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Wed, 11 Nov 2020 22:58:55 -0800
Subject: [PATCH] Fix cross compilation using autoconf detected AR
currently its using 'ar' program from build host, which is not expected,
we need to respect AR passed in environment
Upstream-Status: Pending
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
configure.in | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/configure.in b/configure.in
index 4ddbe8b..b7c3c31 100644
--- a/configure.in
+++ b/configure.in
@@ -84,6 +84,13 @@ AC_ARG_ENABLE(syslog,
])
dnl Checks for programs.
+m4_ifndef([AC_PROG_AR],[dnl
+ AN_MAKEVAR([AR], [AC_PROG_AR])
+ AN_PROGRAM([ar], [AC_PROG_AR])
+ AC_DEFUN([AC_PROG_AR],
+ [AC_CHECK_TOOL(AR, ar, :)])
+])
+AC_PROG_AR
AC_PROG_CC
AC_PROG_GCC_TRADITIONAL
dnl AC_PROG_INSTALL included in AM_INIT_AUTOMAKE
--
2.29.2

View File

@@ -19,6 +19,7 @@ SRC_URI = "http://www.ohse.de/uwe/releases/lrzsz-${PV}.tar.gz \
file://lrzsz-check-locale.h.patch \
file://cve-2018-10195.patch \
file://include.patch \
file://0001-Fix-cross-compilation-using-autoconf-detected-AR.patch \
"
SRC_URI[md5sum] = "b5ce6a74abc9b9eb2af94dffdfd372a4"

View File

@@ -21,7 +21,7 @@ SRC_URI = "https://ftp.isc.org/isc/bind9/${PV}/${BPN}-${PV}.tar.gz \
file://0001-avoid-start-failure-with-bind-user.patch \
"
SRC_URI[sha256sum] = "cbf8cb4b74dd1452d97c3a2a8c625ea346df8516b4b3508ef07443121a591342"
SRC_URI[sha256sum] = "1c882705827b6aafa45d917ae3b20eccccc8d5df3c4477df44b04382e6c47562"
UPSTREAM_CHECK_URI = "https://ftp.isc.org/isc/bind9/"
# stay at 9.11 until 9.16, from 9.16 follow the ESV versions divisible by 4

View File

@@ -52,6 +52,7 @@ SRC_URI = "${KERNELORG_MIRROR}/linux/bluetooth/bluez-${PV}.tar.xz \
${@bb.utils.contains('DISTRO_FEATURES', 'systemd', '', 'file://0001-Allow-using-obexd-without-systemd-in-the-user-sessio.patch', d)} \
file://0001-tests-add-a-target-for-building-tests-without-runnin.patch \
file://0001-test-gatt-Fix-hung-issue.patch \
file://CVE-2021-0129.patch \
file://CVE-2021-3588.patch \
"
S = "${WORKDIR}/bluez-${PV}"

View File

@@ -0,0 +1,109 @@
From 00da0fb4972cf59e1c075f313da81ea549cb8738 Mon Sep 17 00:00:00 2001
From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Date: Tue, 2 Mar 2021 11:38:33 -0800
Subject: shared/gatt-server: Fix not properly checking for secure flags
When passing the mask to check_permissions all valid permissions for
the operation must be set including BT_ATT_PERM_SECURE flags.
Upstream-Status: Backport [https://git.kernel.org/pub/scm/bluetooth/bluez.git/patch/?id=00da0fb4972cf59e1c075f313da81ea549cb8738]
Signed-off-by: Marta Rybczynska <marta.rybczynska@huawei.com>
CVE: CVE-2021-0129
---
src/shared/att-types.h | 8 ++++++++
src/shared/gatt-server.c | 25 +++++++------------------
2 files changed, 15 insertions(+), 18 deletions(-)
diff --git a/src/shared/att-types.h b/src/shared/att-types.h
index 7108b4e94..3adc05d9e 100644
--- a/src/shared/att-types.h
+++ b/src/shared/att-types.h
@@ -129,6 +129,14 @@ struct bt_att_pdu_error_rsp {
#define BT_ATT_PERM_WRITE_SECURE 0x0200
#define BT_ATT_PERM_SECURE (BT_ATT_PERM_READ_SECURE | \
BT_ATT_PERM_WRITE_SECURE)
+#define BT_ATT_PERM_READ_MASK (BT_ATT_PERM_READ | \
+ BT_ATT_PERM_READ_AUTHEN | \
+ BT_ATT_PERM_READ_ENCRYPT | \
+ BT_ATT_PERM_READ_SECURE)
+#define BT_ATT_PERM_WRITE_MASK (BT_ATT_PERM_WRITE | \
+ BT_ATT_PERM_WRITE_AUTHEN | \
+ BT_ATT_PERM_WRITE_ENCRYPT | \
+ BT_ATT_PERM_WRITE_SECURE)
/* GATT Characteristic Properties Bitfield values */
#define BT_GATT_CHRC_PROP_BROADCAST 0x01
diff --git a/src/shared/gatt-server.c b/src/shared/gatt-server.c
index b5f7de7dc..970c35f94 100644
--- a/src/shared/gatt-server.c
+++ b/src/shared/gatt-server.c
@@ -444,9 +444,7 @@ static void process_read_by_type(struct async_read_op *op)
return;
}
- ecode = check_permissions(server, attr, BT_ATT_PERM_READ |
- BT_ATT_PERM_READ_AUTHEN |
- BT_ATT_PERM_READ_ENCRYPT);
+ ecode = check_permissions(server, attr, BT_ATT_PERM_READ_MASK);
if (ecode)
goto error;
@@ -811,9 +809,7 @@ static void write_cb(struct bt_att_chan *chan, uint8_t opcode, const void *pdu,
(opcode == BT_ATT_OP_WRITE_REQ) ? "Req" : "Cmd",
handle);
- ecode = check_permissions(server, attr, BT_ATT_PERM_WRITE |
- BT_ATT_PERM_WRITE_AUTHEN |
- BT_ATT_PERM_WRITE_ENCRYPT);
+ ecode = check_permissions(server, attr, BT_ATT_PERM_WRITE_MASK);
if (ecode)
goto error;
@@ -913,9 +909,7 @@ static void handle_read_req(struct bt_att_chan *chan,
opcode == BT_ATT_OP_READ_BLOB_REQ ? "Blob " : "",
handle);
- ecode = check_permissions(server, attr, BT_ATT_PERM_READ |
- BT_ATT_PERM_READ_AUTHEN |
- BT_ATT_PERM_READ_ENCRYPT);
+ ecode = check_permissions(server, attr, BT_ATT_PERM_READ_MASK);
if (ecode)
goto error;
@@ -1051,9 +1045,8 @@ static void read_multiple_complete_cb(struct gatt_db_attribute *attr, int err,
goto error;
}
- ecode = check_permissions(data->server, next_attr, BT_ATT_PERM_READ |
- BT_ATT_PERM_READ_AUTHEN |
- BT_ATT_PERM_READ_ENCRYPT);
+ ecode = check_permissions(data->server, next_attr,
+ BT_ATT_PERM_READ_MASK);
if (ecode)
goto error;
@@ -1129,9 +1122,7 @@ static void read_multiple_cb(struct bt_att_chan *chan, uint8_t opcode,
goto error;
}
- ecode = check_permissions(data->server, attr, BT_ATT_PERM_READ |
- BT_ATT_PERM_READ_AUTHEN |
- BT_ATT_PERM_READ_ENCRYPT);
+ ecode = check_permissions(data->server, attr, BT_ATT_PERM_READ_MASK);
if (ecode)
goto error;
@@ -1308,9 +1299,7 @@ static void prep_write_cb(struct bt_att_chan *chan, uint8_t opcode,
util_debug(server->debug_callback, server->debug_data,
"Prep Write Req - handle: 0x%04x", handle);
- ecode = check_permissions(server, attr, BT_ATT_PERM_WRITE |
- BT_ATT_PERM_WRITE_AUTHEN |
- BT_ATT_PERM_WRITE_ENCRYPT);
+ ecode = check_permissions(server, attr, BT_ATT_PERM_WRITE_MASK);
if (ecode)
goto error;
--
cgit 1.2.3-1.el7

View File

@@ -0,0 +1,67 @@
From 4e355804d57d5686defc363c70f81e6f58cd08f0 Mon Sep 17 00:00:00 2001
From: Simon Josefsson <simon@josefsson.org>
Date: Fri, 17 Dec 2021 21:52:18 -0800
Subject: [PATCH] ftp: check that PASV/LSPV addresses match.
* NEWS: Mention change.
* ftp/ftp.c (initconn): Validate returned addresses.
CVE: CVE-2021-40491
Upstream-Status: Backport
[https://git.savannah.gnu.org/cgit/inetutils.git/commit/?id=58cb043b190fd04effdaea7c9403416b436e50dd]
Signed-off-by: Minjae Kim <flowergom@gmail.com>
---
ftp/ftp.c | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)
diff --git a/ftp/ftp.c b/ftp/ftp.c
index 9813586..7c72cb2 100644
--- a/ftp/ftp.c
+++ b/ftp/ftp.c
@@ -1344,6 +1344,13 @@ initconn (void)
uint32_t *pu32 = (uint32_t *) &data_addr_sa4->sin_addr.s_addr;
pu32[0] = htonl ( (h[0] << 24) | (h[1] << 16) | (h[2] << 8) | h[3]);
}
+ if (data_addr_sa4->sin_addr.s_addr
+ != ((struct sockaddr_in *) &hisctladdr)->sin_addr.s_addr)
+ {
+ printf ("Passive mode address mismatch.\n");
+ (void) command ("ABOR"); /* Cancel any open connection. */
+ goto bad;
+ }
} /* LPSV IPv4 */
else /* IPv6 */
{
@@ -1374,6 +1381,13 @@ initconn (void)
pu32[2] = htonl ( (h[8] << 24) | (h[9] << 16) | (h[10] << 8) | h[11]);
pu32[3] = htonl ( (h[12] << 24) | (h[13] << 16) | (h[14] << 8) | h[15]);
}
+ if (data_addr_sa6->sin6_addr.s6_addr
+ != ((struct sockaddr_in6 *) &hisctladdr)->sin6_addr.s6_addr)
+ {
+ printf ("Passive mode address mismatch.\n");
+ (void) command ("ABOR"); /* Cancel any open connection. */
+ goto bad;
+ }
} /* LPSV IPv6 */
}
else /* !EPSV && !LPSV */
@@ -1394,6 +1408,13 @@ initconn (void)
| ((a2 & 0xff) << 8) | (a3 & 0xff) );
data_addr_sa4->sin_port =
htons (((p0 & 0xff) << 8) | (p1 & 0xff));
+ if (data_addr_sa4->sin_addr.s_addr
+ != ((struct sockaddr_in *) &hisctladdr)->sin_addr.s_addr)
+ {
+ printf ("Passive mode address mismatch.\n");
+ (void) command ("ABOR"); /* Cancel any open connection. */
+ goto bad;
+ }
} /* PASV */
else
{
--
2.25.1

View File

@@ -23,6 +23,7 @@ SRC_URI = "${GNU_MIRROR}/inetutils/inetutils-${PV}.tar.gz \
file://inetutils-only-check-pam_appl.h-when-pam-enabled.patch \
file://0001-rcp-fix-to-work-with-large-files.patch \
file://fix-buffer-fortify-tfpt.patch \
file://CVE-2021-40491.patch \
"
SRC_URI[md5sum] = "04852c26c47cc8c6b825f2b74f191f52"

View File

@@ -0,0 +1,52 @@
From a6414400ec94a17871081f7df24f910a6ee01b8b Mon Sep 17 00:00:00 2001
From: Ali Abdallah <aabdallah@suse.de>
Date: Wed, 24 Nov 2021 13:33:39 +0100
Subject: [PATCH] CVE-2021-41617 fix
backport of the following two upstream commits
f3cbe43e28fe71427d41cfe3a17125b972710455
bf944e3794eff5413f2df1ef37cddf96918c6bde
CVE-2021-41617 failed to correctly initialise supplemental groups
when executing an AuthorizedKeysCommand or AuthorizedPrincipalsCommand,
where a AuthorizedKeysCommandUser or AuthorizedPrincipalsCommandUser
directive has been set to run the command as a different user. Instead
these commands would inherit the groups that sshd(8) was started with.
---
auth.c | 8 ++++++++
1 file changed, 8 insertions(+)
CVE: CVE-2021-41617
Upstream-Status: Backport [https://bugzilla.suse.com/attachment.cgi?id=854015]
Comment: No change in any hunk
Signed-off-by: Sana Kazi <Sana.Kazi@kpit.com>
diff --git a/auth.c b/auth.c
index 163038f..a47b267 100644
--- a/auth.c
+++ b/auth.c
@@ -52,6 +52,7 @@
#include <limits.h>
#include <netdb.h>
#include <time.h>
+#include <grp.h>
#include "xmalloc.h"
#include "match.h"
@@ -851,6 +852,13 @@ subprocess(const char *tag, struct passwd *pw, const char *command,
}
closefrom(STDERR_FILENO + 1);
+ if (geteuid() == 0 &&
+ initgroups(pw->pw_name, pw->pw_gid) == -1) {
+ error("%s: initgroups(%s, %u): %s", tag,
+ pw->pw_name, (u_int)pw->pw_gid, strerror(errno));
+ _exit(1);
+ }
+
/* Don't use permanently_set_uid() here to avoid fatal() */
if (setresgid(pw->pw_gid, pw->pw_gid, pw->pw_gid) == -1) {
error("%s: setresgid %u: %s", tag, (u_int)pw->pw_gid,
--
2.26.2

View File

@@ -5,7 +5,7 @@ Ssh (Secure Shell) is a program for logging into a remote machine \
and for executing commands on a remote machine."
HOMEPAGE = "http://www.openssh.com/"
SECTION = "console/network"
LICENSE = "BSD & ISC & MIT"
LICENSE = "BSD-2-Clause & BSD-3-Clause & BSD-4-Clause & ISC & MIT"
LIC_FILES_CHKSUM = "file://LICENCE;md5=18d9e5a8b3dd1790d73502f50426d4d3"
DEPENDS = "zlib openssl virtual/crypt"
@@ -26,6 +26,7 @@ SRC_URI = "http://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-${PV}.tar
file://add-test-support-for-busybox.patch \
file://CVE-2020-14145.patch \
file://CVE-2021-28041.patch \
file://CVE-2021-41617.patch \
"
SRC_URI[md5sum] = "3076e6413e8dbe56d33848c1054ac091"
SRC_URI[sha256sum] = "43925151e6cf6cee1450190c0e9af4dc36b41c12737619edff8bcebdff64e671"
@@ -50,6 +51,15 @@ CVE_CHECK_WHITELIST += "CVE-2020-15778"
# https://www.securityfocus.com/bid/30794
CVE_CHECK_WHITELIST += "CVE-2008-3844"
# openssh-ssh1 is provided for compatibility with old devices that
# cannot be upgraded to modern protocols. Thus they may not provide security
# support for this package because doing so would prevent access to equipment.
# The upstream OpenSSH developers see this as an important
# security feature and do not intend to 'fix' it.
# https://security-tracker.debian.org/tracker/CVE-2016-20012
# https://ubuntu.com/security/CVE-2016-20012
CVE_CHECK_WHITELIST += "CVE-2016-20012"
PAM_SRC_URI = "file://sshd"
inherit manpages useradd update-rc.d update-alternatives systemd

View File

@@ -0,0 +1,22 @@
Using localtime() means the output can depend on the timezone of the build machine.
Using gmtime() is safer. For complete reproducibility use SOURCE_DATE_EPOCH if set.
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Upstream-Status: Pending [should be suitable]
Index: openssl-3.0.1/apps/progs.pl
===================================================================
--- openssl-3.0.1.orig/apps/progs.pl
+++ openssl-3.0.1/apps/progs.pl
@@ -21,7 +21,10 @@ die "Unrecognised option, must be -C or
my %commands = ();
my $cmdre = qr/^\s*int\s+([a-z_][a-z0-9_]*)_main\(\s*int\s+argc\s*,/;
my $apps_openssl = shift @ARGV;
-my $YEAR = [localtime()]->[5] + 1900;
+my $YEAR = [gmtime()]->[5] + 1900;
+if (defined($ENV{SOURCE_DATE_EPOCH}) && $ENV{SOURCE_DATE_EPOCH} !~ /\D/) {
+ $YEAR = [gmtime($ENV{SOURCE_DATE_EPOCH})]->[5] + 1900;
+}
# because the program apps/openssl has object files as sources, and
# they then have the corresponding C files as source, we need to chain

View File

@@ -17,6 +17,7 @@ SRC_URI = "http://www.openssl.org/source/openssl-${PV}.tar.gz \
file://0001-buildinfo-strip-sysroot-and-debug-prefix-map-from-co.patch \
file://afalg.patch \
file://reproducible.patch \
file://reproducibility.patch \
"
SRC_URI_append_class-nativesdk = " \

View File

@@ -0,0 +1,53 @@
From 04f052c56ded5ab6a904e3a264a73dc0412b2e78 Mon Sep 17 00:00:00 2001
From: Denys Vlasenko <vda.linux@googlemail.com>
Date: Tue, 15 Jun 2021 15:07:57 +0200
Subject: [PATCH] unlzma: fix a case where we could read before beginning of
buffer
Cc: pavel@zhukoff.net
Testcase:
21 01 01 00 00 00 00 00 e7 01 01 01 ef 00 df b6
00 17 02 10 11 0f ff 00 16 00 00
Unfortunately, the bug is not reliably causing a segfault,
the behavior depends on what's in memory before the buffer.
function old new delta
unpack_lzma_stream 2762 2768 +6
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Signed-off-by: Pavel Zhukov <pavel.zhukov@huawei.com>
CVE: CVE-2021-42374
Upstream-Status: Backport [https://git.busybox.net/busybox/commit/?h=1_33_stable&id=d326be2850ea2bd78fe2c22d6c45c3b861d82937]
Comment: testdata dropped because of binary format
---
archival/libarchive/decompress_unlzma.c | 5 ++++-
testsuite/unlzma.tests | 17 +++++++++++++----
testsuite/unlzma_issue_3.lzma | Bin 0 -> 27 bytes
3 files changed, 17 insertions(+), 5 deletions(-)
create mode 100644 testsuite/unlzma_issue_3.lzma
diff --git a/archival/libarchive/decompress_unlzma.c b/archival/libarchive/decompress_unlzma.c
index 0744f231a1d64d92676b0cada2342f88f3b39b31..fb5aac8fe9ea0c53e0c2d7a7cbd05a753e39bc9d 100644
--- a/archival/libarchive/decompress_unlzma.c
+++ b/archival/libarchive/decompress_unlzma.c
@@ -290,8 +290,11 @@ unpack_lzma_stream(transformer_state_t *xstate)
uint32_t pos;
pos = buffer_pos - rep0;
- if ((int32_t)pos < 0)
+ if ((int32_t)pos < 0) {
pos += header.dict_size;
+ if ((int32_t)pos < 0)
+ goto bad;
+ }
match_byte = buffer[pos];
do {
int bit;
--
2.34.0

View File

@@ -0,0 +1,138 @@
From 56a335378ac100d51c30b21eee499a2effa37fba Mon Sep 17 00:00:00 2001
From: Denys Vlasenko <vda.linux@googlemail.com>
Date: Tue, 15 Jun 2021 16:05:57 +0200
Subject: hush: fix handling of \^C and "^C"
function old new delta
parse_stream 2238 2252 +14
encode_string 243 256 +13
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/0 up/down: 27/0) Total: 27 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
(cherry picked from commit 1b7a9b68d0e9aa19147d7fda16eb9a6b54156985)
Signed-off-by: Pavel Zhukov <pavel.zhukov@huawei.com>
CVE: CVE-2021-42376
Upstream-Status: Backport [https://git.busybox.net/busybox/patch/?id=56a335378ac100d51c30b21eee499a2effa37fba]
Comment: No changes in any hunk
---
shell/ash_test/ash-misc/control_char3.right | 1 +
shell/ash_test/ash-misc/control_char3.tests | 2 ++
shell/ash_test/ash-misc/control_char4.right | 1 +
shell/ash_test/ash-misc/control_char4.tests | 2 ++
shell/hush.c | 11 +++++++++++
shell/hush_test/hush-misc/control_char3.right | 1 +
shell/hush_test/hush-misc/control_char3.tests | 2 ++
shell/hush_test/hush-misc/control_char4.right | 1 +
shell/hush_test/hush-misc/control_char4.tests | 2 ++
9 files changed, 23 insertions(+)
create mode 100644 shell/ash_test/ash-misc/control_char3.right
create mode 100755 shell/ash_test/ash-misc/control_char3.tests
create mode 100644 shell/ash_test/ash-misc/control_char4.right
create mode 100755 shell/ash_test/ash-misc/control_char4.tests
create mode 100644 shell/hush_test/hush-misc/control_char3.right
create mode 100755 shell/hush_test/hush-misc/control_char3.tests
create mode 100644 shell/hush_test/hush-misc/control_char4.right
create mode 100755 shell/hush_test/hush-misc/control_char4.tests
diff --git a/shell/ash_test/ash-misc/control_char3.right b/shell/ash_test/ash-misc/control_char3.right
new file mode 100644
index 000000000..283e02cbb
--- /dev/null
+++ b/shell/ash_test/ash-misc/control_char3.right
@@ -0,0 +1 @@
+SHELL: line 1: : not found
diff --git a/shell/ash_test/ash-misc/control_char3.tests b/shell/ash_test/ash-misc/control_char3.tests
new file mode 100755
index 000000000..4359db3f3
--- /dev/null
+++ b/shell/ash_test/ash-misc/control_char3.tests
@@ -0,0 +1,2 @@
+# (set argv0 to "SHELL" to avoid "/path/to/shell: blah" in error messages)
+$THIS_SH -c '\' SHELL
diff --git a/shell/ash_test/ash-misc/control_char4.right b/shell/ash_test/ash-misc/control_char4.right
new file mode 100644
index 000000000..2bf18e684
--- /dev/null
+++ b/shell/ash_test/ash-misc/control_char4.right
@@ -0,0 +1 @@
+SHELL: line 1: -: not found
diff --git a/shell/ash_test/ash-misc/control_char4.tests b/shell/ash_test/ash-misc/control_char4.tests
new file mode 100755
index 000000000..48010f154
--- /dev/null
+++ b/shell/ash_test/ash-misc/control_char4.tests
@@ -0,0 +1,2 @@
+# (set argv0 to "SHELL" to avoid "/path/to/shell: blah" in error messages)
+$THIS_SH -c '"-"' SHELL
diff --git a/shell/hush.c b/shell/hush.c
index 9fead37da..249728b9d 100644
--- a/shell/hush.c
+++ b/shell/hush.c
@@ -5235,6 +5235,11 @@ static int encode_string(o_string *as_string,
}
#endif
o_addQchr(dest, ch);
+ if (ch == SPECIAL_VAR_SYMBOL) {
+ /* Convert "^C" to corresponding special variable reference */
+ o_addchr(dest, SPECIAL_VAR_QUOTED_SVS);
+ o_addchr(dest, SPECIAL_VAR_SYMBOL);
+ }
goto again;
#undef as_string
}
@@ -5346,6 +5351,11 @@ static struct pipe *parse_stream(char **pstring,
if (ch == '\n')
continue; /* drop \<newline>, get next char */
nommu_addchr(&ctx.as_string, '\\');
+ if (ch == SPECIAL_VAR_SYMBOL) {
+ nommu_addchr(&ctx.as_string, ch);
+ /* Convert \^C to corresponding special variable reference */
+ goto case_SPECIAL_VAR_SYMBOL;
+ }
o_addchr(&ctx.word, '\\');
if (ch == EOF) {
/* Testcase: eval 'echo Ok\' */
@@ -5670,6 +5680,7 @@ static struct pipe *parse_stream(char **pstring,
/* Note: nommu_addchr(&ctx.as_string, ch) is already done */
switch (ch) {
+ case_SPECIAL_VAR_SYMBOL:
case SPECIAL_VAR_SYMBOL:
/* Convert raw ^C to corresponding special variable reference */
o_addchr(&ctx.word, SPECIAL_VAR_SYMBOL);
diff --git a/shell/hush_test/hush-misc/control_char3.right b/shell/hush_test/hush-misc/control_char3.right
new file mode 100644
index 000000000..94b4f8699
--- /dev/null
+++ b/shell/hush_test/hush-misc/control_char3.right
@@ -0,0 +1 @@
+hush: can't execute '': No such file or directory
diff --git a/shell/hush_test/hush-misc/control_char3.tests b/shell/hush_test/hush-misc/control_char3.tests
new file mode 100755
index 000000000..4359db3f3
--- /dev/null
+++ b/shell/hush_test/hush-misc/control_char3.tests
@@ -0,0 +1,2 @@
+# (set argv0 to "SHELL" to avoid "/path/to/shell: blah" in error messages)
+$THIS_SH -c '\' SHELL
diff --git a/shell/hush_test/hush-misc/control_char4.right b/shell/hush_test/hush-misc/control_char4.right
new file mode 100644
index 000000000..698e21427
--- /dev/null
+++ b/shell/hush_test/hush-misc/control_char4.right
@@ -0,0 +1 @@
+hush: can't execute '-': No such file or directory
diff --git a/shell/hush_test/hush-misc/control_char4.tests b/shell/hush_test/hush-misc/control_char4.tests
new file mode 100755
index 000000000..48010f154
--- /dev/null
+++ b/shell/hush_test/hush-misc/control_char4.tests
@@ -0,0 +1,2 @@
+# (set argv0 to "SHELL" to avoid "/path/to/shell: blah" in error messages)
+$THIS_SH -c '"-"' SHELL
--
cgit v1.2.3

View File

@@ -52,6 +52,9 @@ SRC_URI = "https://busybox.net/downloads/busybox-${PV}.tar.bz2;name=tarball \
file://0001-hwclock-make-glibc-2.31-compatible.patch \
file://0001-decompress_gunzip-Fix-DoS-if-gzip-is-corrupt.patch \
file://0001-mktemp-add-tmpdir-option.patch \
file://CVE-2021-42374.patch \
file://CVE-2021-42376.patch \
file://CVE-2021-423xx-awk.patch \
"
SRC_URI_append_libc-musl = " file://musl.cfg "

View File

@@ -0,0 +1,215 @@
From a21708eb8d07b4a6dbc1d3e4ace4c5721515a84c Mon Sep 17 00:00:00 2001
From: Sana Kazi <Sana.Kazi@kpit.com>
Date: Wed, 8 Dec 2021 12:25:34 +0530
Subject: [PATCH] busybox: Fix multiple security issues in awk
Description: fix multiple security issues in awk
Origin: backported awk.c from busybox 1.34.1
CVE: CVE-2021-42378
CVE: CVE-2021-42379
CVE: CVE-2021-42380
CVE: CVE-2021-42381
CVE: CVE-2021-42382
CVE: CVE-2021-42384
CVE: CVE-2021-42385
CVE: CVE-2021-42386
Upstream-Status: Backport [https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/busybox/1:1.30.1-6ubuntu3.1/busybox_1.30.1-6ubuntu3.1.debian.tar.xz]
Comment: Refreshed first hunk and removed few hunks as they are already present in source.
Signed-off-by: Sana Kazi <Sana.Kazi@kpit.com>
Signed-off-by: Ranjitsinh Rathod <Ranjitsinh.Rathod@kpit.com>
---
editors/awk.c | 80 ++++++++++++++++++++++++++++++++++++++-------------
1 file changed, 60 insertions(+), 20 deletions(-)
diff --git a/editors/awk.c b/editors/awk.c
index d25508e..4e4f282 100644
--- a/editors/awk.c
+++ b/editors/awk.c
@@ -272,7 +272,8 @@ typedef struct tsplitter_s {
/* if previous token class is CONCAT1 and next is CONCAT2, concatenation */
/* operator is inserted between them */
#define TC_CONCAT1 (TC_VARIABLE | TC_ARRTERM | TC_SEQTERM \
- | TC_STRING | TC_NUMBER | TC_UOPPOST)
+ | TC_STRING | TC_NUMBER | TC_UOPPOST \
+ | TC_LENGTH)
#define TC_CONCAT2 (TC_OPERAND | TC_UOPPRE)
#define OF_RES1 0x010000
@@ -404,7 +405,7 @@ static const char tokenlist[] ALIGN1 =
#define OC_B OC_BUILTIN
-static const uint32_t tokeninfo[] = {
+static const uint32_t tokeninfo[] ALIGN4 = {
0,
0,
OC_REGEXP,
@@ -1070,8 +1071,10 @@ static uint32_t next_token(uint32_t expected)
const uint32_t *ti;
if (t_rollback) {
+ debug_printf_parse("%s: using rolled-back token\n", __func__);
t_rollback = FALSE;
} else if (concat_inserted) {
+ debug_printf_parse("%s: using concat-inserted token\n", __func__);
concat_inserted = FALSE;
t_tclass = save_tclass;
t_info = save_info;
@@ -1200,7 +1203,11 @@ static uint32_t next_token(uint32_t expected)
goto readnext;
/* insert concatenation operator when needed */
- if ((ltclass & TC_CONCAT1) && (tc & TC_CONCAT2) && (expected & TC_BINOP)) {
+ debug_printf_parse("%s: %x %x %x concat_inserted?\n", __func__,
+ (ltclass & TC_CONCAT1), (tc & TC_CONCAT2), (expected & TC_BINOP));
+ if ((ltclass & TC_CONCAT1) && (tc & TC_CONCAT2) && (expected & TC_BINOP)
+ && !(ltclass == TC_LENGTH && tc == TC_SEQSTART) /* but not for "length(..." */
+ ) {
concat_inserted = TRUE;
save_tclass = tc;
save_info = t_info;
@@ -1208,6 +1215,7 @@ static uint32_t next_token(uint32_t expected)
t_info = OC_CONCAT | SS | P(35);
}
+ debug_printf_parse("%s: t_tclass=tc=%x\n", __func__, t_tclass);
t_tclass = tc;
}
ltclass = t_tclass;
@@ -1218,6 +1226,7 @@ static uint32_t next_token(uint32_t expected)
EMSG_UNEXP_EOS : EMSG_UNEXP_TOKEN);
}
+ debug_printf_parse("%s: returning, ltclass:%x t_double:%f\n", __func__, ltclass, t_double);
return ltclass;
#undef concat_inserted
#undef save_tclass
@@ -1282,7 +1291,7 @@ static node *parse_expr(uint32_t iexp)
glptr = NULL;
} else if (tc & (TC_BINOP | TC_UOPPOST)) {
- debug_printf_parse("%s: TC_BINOP | TC_UOPPOST\n", __func__);
+ debug_printf_parse("%s: TC_BINOP | TC_UOPPOST tc:%x\n", __func__, tc);
/* for binary and postfix-unary operators, jump back over
* previous operators with higher priority */
vn = cn;
@@ -1350,8 +1359,10 @@ static node *parse_expr(uint32_t iexp)
v = cn->l.v = xzalloc(sizeof(var));
if (tc & TC_NUMBER)
setvar_i(v, t_double);
- else
+ else {
setvar_s(v, t_string);
+ xtc &= ~TC_UOPPOST; /* "str"++ is not allowed */
+ }
break;
case TC_REGEXP:
@@ -1387,7 +1398,12 @@ static node *parse_expr(uint32_t iexp)
case TC_LENGTH:
debug_printf_parse("%s: TC_LENGTH\n", __func__);
- next_token(TC_SEQSTART | TC_OPTERM | TC_GRPTERM);
+ next_token(TC_SEQSTART /* length(...) */
+ | TC_OPTERM /* length; (or newline)*/
+ | TC_GRPTERM /* length } */
+ | TC_BINOPX /* length <op> NUM */
+ | TC_COMMA /* print length, 1 */
+ );
rollback_token();
if (t_tclass & TC_SEQSTART) {
/* It was a "(" token. Handle just like TC_BUILTIN */
@@ -1747,12 +1763,34 @@ static void fsrealloc(int size)
nfields = size;
}
+static int regexec1_nonempty(const regex_t *preg, const char *s, regmatch_t pmatch[])
+{
+ int r = regexec(preg, s, 1, pmatch, 0);
+ if (r == 0 && pmatch[0].rm_eo == 0) {
+ /* For example, happens when FS can match
+ * an empty string (awk -F ' *'). Logically,
+ * this should split into one-char fields.
+ * However, gawk 5.0.1 searches for first
+ * _non-empty_ separator string match:
+ */
+ size_t ofs = 0;
+ do {
+ ofs++;
+ if (!s[ofs])
+ return REG_NOMATCH;
+ regexec(preg, s + ofs, 1, pmatch, 0);
+ } while (pmatch[0].rm_eo == 0);
+ pmatch[0].rm_so += ofs;
+ pmatch[0].rm_eo += ofs;
+ }
+ return r;
+}
+
static int awk_split(const char *s, node *spl, char **slist)
{
- int l, n;
+ int n;
char c[4];
char *s1;
- regmatch_t pmatch[2]; // TODO: why [2]? [1] is enough...
/* in worst case, each char would be a separate field */
*slist = s1 = xzalloc(strlen(s) * 2 + 3);
@@ -1769,29 +1807,31 @@ static int awk_split(const char *s, node *spl, char **slist)
return n; /* "": zero fields */
n++; /* at least one field will be there */
do {
+ int l;
+ regmatch_t pmatch[2]; // TODO: why [2]? [1] is enough...
+
l = strcspn(s, c+2); /* len till next NUL or \n */
- if (regexec(icase ? spl->r.ire : spl->l.re, s, 1, pmatch, 0) == 0
+ if (regexec1_nonempty(icase ? spl->r.ire : spl->l.re, s, pmatch) == 0
&& pmatch[0].rm_so <= l
) {
+ /* if (pmatch[0].rm_eo == 0) ... - impossible */
l = pmatch[0].rm_so;
- if (pmatch[0].rm_eo == 0) {
- l++;
- pmatch[0].rm_eo++;
- }
n++; /* we saw yet another delimiter */
} else {
pmatch[0].rm_eo = l;
if (s[l])
pmatch[0].rm_eo++;
}
- memcpy(s1, s, l);
- /* make sure we remove *all* of the separator chars */
- do {
- s1[l] = '\0';
- } while (++l < pmatch[0].rm_eo);
- nextword(&s1);
+ s1 = mempcpy(s1, s, l);
+ *s1++ = '\0';
s += pmatch[0].rm_eo;
} while (*s);
+
+ /* echo a-- | awk -F-- '{ print NF, length($NF), $NF }'
+ * should print "2 0 ":
+ */
+ *s1 = '\0';
+
return n;
}
if (c[0] == '\0') { /* null split */
@@ -1995,7 +2035,7 @@ static int ptest(node *pattern)
static int awk_getline(rstream *rsm, var *v)
{
char *b;
- regmatch_t pmatch[2];
+ regmatch_t pmatch[2]; // TODO: why [2]? [1] is enough...
int size, a, p, pp = 0;
int fd, so, eo, r, rp;
char c, *m, *s;

View File

@@ -22,7 +22,9 @@ SRC_URI = "http://matt.ucc.asn.au/dropbear/releases/dropbear-${PV}.tar.bz2 \
file://dropbear.socket \
file://dropbear.default \
${@bb.utils.contains('DISTRO_FEATURES', 'pam', '${PAM_SRC_URI}', '', d)} \
${@bb.utils.contains('PACKAGECONFIG', 'disable-weak-ciphers', 'file://dropbear-disable-weak-ciphers.patch', '', d)} "
${@bb.utils.contains('PACKAGECONFIG', 'disable-weak-ciphers', 'file://dropbear-disable-weak-ciphers.patch', '', d)} \
file://CVE-2020-36254.patch \
"
PAM_SRC_URI = "file://0005-dropbear-enable-pam.patch \
file://0006-dropbear-configuration-file.patch \

View File

@@ -0,0 +1,29 @@
From c96c48d62aefc372f2105293ddf8cff2d116dc3a Mon Sep 17 00:00:00 2001
From: Haelwenn Monnier <contact+github.com@hacktivis.me>
Date: Mon, 25 May 2020 14:54:29 +0200
Subject: [PATCH] scp.c: Port OpenSSH CVE-2018-20685 fix (#80)
Reference:
https://github.com/mkj/dropbear/commit/8f8a3dff705fad774a10864a2e3dbcfa9779ceff
CVE: CVE-2020-36254
Upstream-Status: Backport
---
scp.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/scp.c b/scp.c
index 742ae00..7b8e7d2 100644
--- a/scp.c
+++ b/scp.c
@@ -935,7 +935,8 @@ sink(int argc, char **argv)
size = size * 10 + (*cp++ - '0');
if (*cp++ != ' ')
SCREWUP("size not delimited");
- if ((strchr(cp, '/') != NULL) || (strcmp(cp, "..") == 0)) {
+ if (*cp == '\0' || strchr(cp, '/') != NULL ||
+ strcmp(cp, ".") == 0 || strcmp(cp, "..") == 0) {
run_err("error: unexpected filename: %s", cp);
exit(1);
}

View File

@@ -0,0 +1,65 @@
From 0adcb34c49bee5b19bd29b16a578c510c23597ea Mon Sep 17 00:00:00 2001
From: Sebastian Pipping <sebastian@pipping.org>
Date: Mon, 27 Dec 2021 20:15:02 +0100
Subject: [PATCH] lib: Detect and prevent troublesome left shifts in function
storeAtts (CVE-2021-45960)
Upstream-Status: Backport:
https://github.com/libexpat/libexpat/pull/534/commits/0adcb34c49bee5b19bd29b16a578c510c23597ea
CVE: CVE-2021-45960
Signed-off-by: Steve Sakoman <steve@sakoman.com>
---
expat/lib/xmlparse.c | 31 +++++++++++++++++++++++++++++--
1 file changed, 29 insertions(+), 2 deletions(-)
diff --git a/expat/lib/xmlparse.c b/expat/lib/xmlparse.c
index d730f41c3..b47c31b05 100644
--- a/lib/xmlparse.c
+++ b/lib/xmlparse.c
@@ -3414,7 +3414,13 @@ storeAtts(XML_Parser parser, const ENCODING *enc, const char *attStr,
if (nPrefixes) {
int j; /* hash table index */
unsigned long version = parser->m_nsAttsVersion;
- int nsAttsSize = (int)1 << parser->m_nsAttsPower;
+
+ /* Detect and prevent invalid shift */
+ if (parser->m_nsAttsPower >= sizeof(unsigned int) * 8 /* bits per byte */) {
+ return XML_ERROR_NO_MEMORY;
+ }
+
+ unsigned int nsAttsSize = 1u << parser->m_nsAttsPower;
unsigned char oldNsAttsPower = parser->m_nsAttsPower;
/* size of hash table must be at least 2 * (# of prefixed attributes) */
if ((nPrefixes << 1)
@@ -3425,7 +3431,28 @@ storeAtts(XML_Parser parser, const ENCODING *enc, const char *attStr,
;
if (parser->m_nsAttsPower < 3)
parser->m_nsAttsPower = 3;
- nsAttsSize = (int)1 << parser->m_nsAttsPower;
+
+ /* Detect and prevent invalid shift */
+ if (parser->m_nsAttsPower >= sizeof(nsAttsSize) * 8 /* bits per byte */) {
+ /* Restore actual size of memory in m_nsAtts */
+ parser->m_nsAttsPower = oldNsAttsPower;
+ return XML_ERROR_NO_MEMORY;
+ }
+
+ nsAttsSize = 1u << parser->m_nsAttsPower;
+
+ /* Detect and prevent integer overflow.
+ * The preprocessor guard addresses the "always false" warning
+ * from -Wtype-limits on platforms where
+ * sizeof(unsigned int) < sizeof(size_t), e.g. on x86_64. */
+#if UINT_MAX >= SIZE_MAX
+ if (nsAttsSize > (size_t)(-1) / sizeof(NS_ATT)) {
+ /* Restore actual size of memory in m_nsAtts */
+ parser->m_nsAttsPower = oldNsAttsPower;
+ return XML_ERROR_NO_MEMORY;
+ }
+#endif
+
temp = (NS_ATT *)REALLOC(parser, parser->m_nsAtts,
nsAttsSize * sizeof(NS_ATT));
if (! temp) {

View File

@@ -0,0 +1,43 @@
From 85ae9a2d7d0e9358f356b33977b842df8ebaec2b Mon Sep 17 00:00:00 2001
From: Sebastian Pipping <sebastian@pipping.org>
Date: Sat, 25 Dec 2021 20:52:08 +0100
Subject: [PATCH] lib: Prevent integer overflow on m_groupSize in function
doProlog (CVE-2021-46143)
---
expat/lib/xmlparse.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/expat/lib/xmlparse.c b/expat/lib/xmlparse.c
index b47c31b0..8f243126 100644
--- a/lib/xmlparse.c
+++ b/lib/xmlparse.c
@@ -5046,6 +5046,11 @@ doProlog(XML_Parser parser, const ENCODING *enc, const char *s, const char *end,
if (parser->m_prologState.level >= parser->m_groupSize) {
if (parser->m_groupSize) {
{
+ /* Detect and prevent integer overflow */
+ if (parser->m_groupSize > (unsigned int)(-1) / 2u) {
+ return XML_ERROR_NO_MEMORY;
+ }
+
char *const new_connector = (char *)REALLOC(
parser, parser->m_groupConnector, parser->m_groupSize *= 2);
if (new_connector == NULL) {
@@ -5056,6 +5061,16 @@ doProlog(XML_Parser parser, const ENCODING *enc, const char *s, const char *end,
}
if (dtd->scaffIndex) {
+ /* Detect and prevent integer overflow.
+ * The preprocessor guard addresses the "always false" warning
+ * from -Wtype-limits on platforms where
+ * sizeof(unsigned int) < sizeof(size_t), e.g. on x86_64. */
+#if UINT_MAX >= SIZE_MAX
+ if (parser->m_groupSize > (size_t)(-1) / sizeof(int)) {
+ return XML_ERROR_NO_MEMORY;
+ }
+#endif
+
int *const new_scaff_index = (int *)REALLOC(
parser, dtd->scaffIndex, parser->m_groupSize * sizeof(int));
if (new_scaff_index == NULL)

View File

@@ -0,0 +1,257 @@
From 9f93e8036e842329863bf20395b8fb8f73834d9e Mon Sep 17 00:00:00 2001
From: Sebastian Pipping <sebastian@pipping.org>
Date: Thu, 30 Dec 2021 22:46:03 +0100
Subject: [PATCH] lib: Prevent integer overflow at multiple places
(CVE-2022-22822 to CVE-2022-22827)
The involved functions are:
- addBinding (CVE-2022-22822)
- build_model (CVE-2022-22823)
- defineAttribute (CVE-2022-22824)
- lookup (CVE-2022-22825)
- nextScaffoldPart (CVE-2022-22826)
- storeAtts (CVE-2022-22827)
Upstream-Status: Backport:
https://github.com/libexpat/libexpat/pull/539/commits/9f93e8036e842329863bf20395b8fb8f73834d9e
CVE: CVE-2022-22822 CVE-2022-22823 CVE-2022-22824 CVE-2022-22825 CVE-2022-22826 CVE-2022-22827
Signed-off-by: Steve Sakoman <steve@sakoman.com>
---
expat/lib/xmlparse.c | 153 ++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 151 insertions(+), 2 deletions(-)
diff --git a/expat/lib/xmlparse.c b/expat/lib/xmlparse.c
index 8f243126..575e73ee 100644
--- a/lib/xmlparse.c
+++ b/lib/xmlparse.c
@@ -3261,13 +3261,38 @@ storeAtts(XML_Parser parser, const ENCODING *enc, const char *attStr,
/* get the attributes from the tokenizer */
n = XmlGetAttributes(enc, attStr, parser->m_attsSize, parser->m_atts);
+
+ /* Detect and prevent integer overflow */
+ if (n > INT_MAX - nDefaultAtts) {
+ return XML_ERROR_NO_MEMORY;
+ }
+
if (n + nDefaultAtts > parser->m_attsSize) {
int oldAttsSize = parser->m_attsSize;
ATTRIBUTE *temp;
#ifdef XML_ATTR_INFO
XML_AttrInfo *temp2;
#endif
+
+ /* Detect and prevent integer overflow */
+ if ((nDefaultAtts > INT_MAX - INIT_ATTS_SIZE)
+ || (n > INT_MAX - (nDefaultAtts + INIT_ATTS_SIZE))) {
+ return XML_ERROR_NO_MEMORY;
+ }
+
parser->m_attsSize = n + nDefaultAtts + INIT_ATTS_SIZE;
+
+ /* Detect and prevent integer overflow.
+ * The preprocessor guard addresses the "always false" warning
+ * from -Wtype-limits on platforms where
+ * sizeof(unsigned int) < sizeof(size_t), e.g. on x86_64. */
+#if UINT_MAX >= SIZE_MAX
+ if ((unsigned)parser->m_attsSize > (size_t)(-1) / sizeof(ATTRIBUTE)) {
+ parser->m_attsSize = oldAttsSize;
+ return XML_ERROR_NO_MEMORY;
+ }
+#endif
+
temp = (ATTRIBUTE *)REALLOC(parser, (void *)parser->m_atts,
parser->m_attsSize * sizeof(ATTRIBUTE));
if (temp == NULL) {
@@ -3276,6 +3301,17 @@ storeAtts(XML_Parser parser, const ENCODING *enc, const char *attStr,
}
parser->m_atts = temp;
#ifdef XML_ATTR_INFO
+ /* Detect and prevent integer overflow.
+ * The preprocessor guard addresses the "always false" warning
+ * from -Wtype-limits on platforms where
+ * sizeof(unsigned int) < sizeof(size_t), e.g. on x86_64. */
+# if UINT_MAX >= SIZE_MAX
+ if ((unsigned)parser->m_attsSize > (size_t)(-1) / sizeof(XML_AttrInfo)) {
+ parser->m_attsSize = oldAttsSize;
+ return XML_ERROR_NO_MEMORY;
+ }
+# endif
+
temp2 = (XML_AttrInfo *)REALLOC(parser, (void *)parser->m_attInfo,
parser->m_attsSize * sizeof(XML_AttrInfo));
if (temp2 == NULL) {
@@ -3610,9 +3646,31 @@ storeAtts(XML_Parser parser, const ENCODING *enc, const char *attStr,
tagNamePtr->prefixLen = prefixLen;
for (i = 0; localPart[i++];)
; /* i includes null terminator */
+
+ /* Detect and prevent integer overflow */
+ if (binding->uriLen > INT_MAX - prefixLen
+ || i > INT_MAX - (binding->uriLen + prefixLen)) {
+ return XML_ERROR_NO_MEMORY;
+ }
+
n = i + binding->uriLen + prefixLen;
if (n > binding->uriAlloc) {
TAG *p;
+
+ /* Detect and prevent integer overflow */
+ if (n > INT_MAX - EXPAND_SPARE) {
+ return XML_ERROR_NO_MEMORY;
+ }
+ /* Detect and prevent integer overflow.
+ * The preprocessor guard addresses the "always false" warning
+ * from -Wtype-limits on platforms where
+ * sizeof(unsigned int) < sizeof(size_t), e.g. on x86_64. */
+#if UINT_MAX >= SIZE_MAX
+ if ((unsigned)(n + EXPAND_SPARE) > (size_t)(-1) / sizeof(XML_Char)) {
+ return XML_ERROR_NO_MEMORY;
+ }
+#endif
+
uri = (XML_Char *)MALLOC(parser, (n + EXPAND_SPARE) * sizeof(XML_Char));
if (! uri)
return XML_ERROR_NO_MEMORY;
@@ -3708,6 +3766,21 @@ addBinding(XML_Parser parser, PREFIX *prefix, const ATTRIBUTE_ID *attId,
if (parser->m_freeBindingList) {
b = parser->m_freeBindingList;
if (len > b->uriAlloc) {
+ /* Detect and prevent integer overflow */
+ if (len > INT_MAX - EXPAND_SPARE) {
+ return XML_ERROR_NO_MEMORY;
+ }
+
+ /* Detect and prevent integer overflow.
+ * The preprocessor guard addresses the "always false" warning
+ * from -Wtype-limits on platforms where
+ * sizeof(unsigned int) < sizeof(size_t), e.g. on x86_64. */
+#if UINT_MAX >= SIZE_MAX
+ if ((unsigned)(len + EXPAND_SPARE) > (size_t)(-1) / sizeof(XML_Char)) {
+ return XML_ERROR_NO_MEMORY;
+ }
+#endif
+
XML_Char *temp = (XML_Char *)REALLOC(
parser, b->uri, sizeof(XML_Char) * (len + EXPAND_SPARE));
if (temp == NULL)
@@ -3720,6 +3793,21 @@ addBinding(XML_Parser parser, PREFIX *prefix, const ATTRIBUTE_ID *attId,
b = (BINDING *)MALLOC(parser, sizeof(BINDING));
if (! b)
return XML_ERROR_NO_MEMORY;
+
+ /* Detect and prevent integer overflow */
+ if (len > INT_MAX - EXPAND_SPARE) {
+ return XML_ERROR_NO_MEMORY;
+ }
+ /* Detect and prevent integer overflow.
+ * The preprocessor guard addresses the "always false" warning
+ * from -Wtype-limits on platforms where
+ * sizeof(unsigned int) < sizeof(size_t), e.g. on x86_64. */
+#if UINT_MAX >= SIZE_MAX
+ if ((unsigned)(len + EXPAND_SPARE) > (size_t)(-1) / sizeof(XML_Char)) {
+ return XML_ERROR_NO_MEMORY;
+ }
+#endif
+
b->uri
= (XML_Char *)MALLOC(parser, sizeof(XML_Char) * (len + EXPAND_SPARE));
if (! b->uri) {
@@ -6141,7 +6229,24 @@ defineAttribute(ELEMENT_TYPE *type, ATTRIBUTE_ID *attId, XML_Bool isCdata,
}
} else {
DEFAULT_ATTRIBUTE *temp;
+
+ /* Detect and prevent integer overflow */
+ if (type->allocDefaultAtts > INT_MAX / 2) {
+ return 0;
+ }
+
int count = type->allocDefaultAtts * 2;
+
+ /* Detect and prevent integer overflow.
+ * The preprocessor guard addresses the "always false" warning
+ * from -Wtype-limits on platforms where
+ * sizeof(unsigned int) < sizeof(size_t), e.g. on x86_64. */
+#if UINT_MAX >= SIZE_MAX
+ if ((unsigned)count > (size_t)(-1) / sizeof(DEFAULT_ATTRIBUTE)) {
+ return 0;
+ }
+#endif
+
temp = (DEFAULT_ATTRIBUTE *)REALLOC(parser, type->defaultAtts,
(count * sizeof(DEFAULT_ATTRIBUTE)));
if (temp == NULL)
@@ -6792,8 +6897,20 @@ lookup(XML_Parser parser, HASH_TABLE *table, KEY name, size_t createSize) {
/* check for overflow (table is half full) */
if (table->used >> (table->power - 1)) {
unsigned char newPower = table->power + 1;
+
+ /* Detect and prevent invalid shift */
+ if (newPower >= sizeof(unsigned long) * 8 /* bits per byte */) {
+ return NULL;
+ }
+
size_t newSize = (size_t)1 << newPower;
unsigned long newMask = (unsigned long)newSize - 1;
+
+ /* Detect and prevent integer overflow */
+ if (newSize > (size_t)(-1) / sizeof(NAMED *)) {
+ return NULL;
+ }
+
size_t tsize = newSize * sizeof(NAMED *);
NAMED **newV = (NAMED **)table->mem->malloc_fcn(tsize);
if (! newV)
@@ -7143,6 +7260,20 @@ nextScaffoldPart(XML_Parser parser) {
if (dtd->scaffCount >= dtd->scaffSize) {
CONTENT_SCAFFOLD *temp;
if (dtd->scaffold) {
+ /* Detect and prevent integer overflow */
+ if (dtd->scaffSize > UINT_MAX / 2u) {
+ return -1;
+ }
+ /* Detect and prevent integer overflow.
+ * The preprocessor guard addresses the "always false" warning
+ * from -Wtype-limits on platforms where
+ * sizeof(unsigned int) < sizeof(size_t), e.g. on x86_64. */
+#if UINT_MAX >= SIZE_MAX
+ if (dtd->scaffSize > (size_t)(-1) / 2u / sizeof(CONTENT_SCAFFOLD)) {
+ return -1;
+ }
+#endif
+
temp = (CONTENT_SCAFFOLD *)REALLOC(
parser, dtd->scaffold, dtd->scaffSize * 2 * sizeof(CONTENT_SCAFFOLD));
if (temp == NULL)
@@ -7212,8 +7343,26 @@ build_model(XML_Parser parser) {
XML_Content *ret;
XML_Content *cpos;
XML_Char *str;
- int allocsize = (dtd->scaffCount * sizeof(XML_Content)
- + (dtd->contentStringLen * sizeof(XML_Char)));
+
+ /* Detect and prevent integer overflow.
+ * The preprocessor guard addresses the "always false" warning
+ * from -Wtype-limits on platforms where
+ * sizeof(unsigned int) < sizeof(size_t), e.g. on x86_64. */
+#if UINT_MAX >= SIZE_MAX
+ if (dtd->scaffCount > (size_t)(-1) / sizeof(XML_Content)) {
+ return NULL;
+ }
+ if (dtd->contentStringLen > (size_t)(-1) / sizeof(XML_Char)) {
+ return NULL;
+ }
+#endif
+ if (dtd->scaffCount * sizeof(XML_Content)
+ > (size_t)(-1) - dtd->contentStringLen * sizeof(XML_Char)) {
+ return NULL;
+ }
+
+ const size_t allocsize = (dtd->scaffCount * sizeof(XML_Content)
+ + (dtd->contentStringLen * sizeof(XML_Char)));
ret = (XML_Content *)MALLOC(parser, allocsize);
if (! ret)

View File

@@ -1,6 +1,6 @@
SUMMARY = "A stream-oriented XML parser library"
DESCRIPTION = "Expat is an XML parser library written in C. It is a stream-oriented parser in which an application registers handlers for things the parser might find in the XML document (like start tags)"
HOMEPAGE = "http://expat.sourceforge.net/"
HOMEPAGE = "https://github.com/libexpat/libexpat"
SECTION = "libs"
LICENSE = "MIT"
@@ -8,6 +8,9 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=5b8620d98e49772d95fc1d291c26aa79"
SRC_URI = "git://github.com/libexpat/libexpat.git;protocol=https;branch=master \
file://CVE-2013-0340.patch \
file://CVE-2021-45960.patch \
file://CVE-2021-46143.patch \
file://CVE-2022-22822-27.patch \
file://libtool-tag.patch \
"

View File

@@ -0,0 +1,129 @@
Backport of:
From 0f384c88a241bbbd884487b1c40b7b75f1e638d3 Mon Sep 17 00:00:00 2001
From: Krzesimir Nowak <qdlacz@gmail.com>
Date: Wed, 10 Feb 2021 23:51:07 +0100
Subject: [PATCH] gbytearray: Do not accept too large byte arrays
GByteArray uses guint for storing the length of the byte array, but it
also has a constructor (g_byte_array_new_take) that takes length as a
gsize. gsize may be larger than guint (64 bits for gsize vs 32 bits
for guint). It is possible to call the function with a value greater
than G_MAXUINT, which will result in silent length truncation. This
may happen as a result of unreffing GBytes into GByteArray, so rather
be loud about it.
(Test case tweaked by Philip Withnall.)
(Backport 2.66: Add #include gstrfuncsprivate.h in the test case for
`g_memdup2()`.)
Upstream-Status: Backport [https://mirrors.ocf.berkeley.edu/ubuntu/pool/main/g/glib2.0/glib2.0_2.64.6-1~ubuntu20.04.3.debian.tar.xz]
CVE: CVE-2021-27218
Signed-off-by: Neetika Singh <Neetika.Singh@kpit.com>
Signed-off-by: Ranjitsinh Rathod <ranjitsinh.rathod@kpit.com>
---
glib/garray.c | 6 ++++++
glib/gbytes.c | 4 ++++
glib/tests/bytes.c | 35 ++++++++++++++++++++++++++++++++++-
3 files changed, 44 insertions(+), 1 deletion(-)
--- a/glib/garray.c
+++ b/glib/garray.c
@@ -2234,6 +2234,10 @@ g_byte_array_steal (GByteArray *array,
* Create byte array containing the data. The data will be owned by the array
* and will be freed with g_free(), i.e. it could be allocated using g_strdup().
*
+ * Do not use it if @len is greater than %G_MAXUINT. #GByteArray
+ * stores the length of its data in #guint, which may be shorter than
+ * #gsize.
+ *
* Since: 2.32
*
* Returns: (transfer full): a new #GByteArray
@@ -2245,6 +2249,8 @@ g_byte_array_new_take (guint8 *data,
GByteArray *array;
GRealArray *real;
+ g_return_val_if_fail (len <= G_MAXUINT, NULL);
+
array = g_byte_array_new ();
real = (GRealArray *)array;
g_assert (real->data == NULL);
--- a/glib/gbytes.c
+++ b/glib/gbytes.c
@@ -519,6 +519,10 @@ g_bytes_unref_to_data (GBytes *bytes,
* g_bytes_new(), g_bytes_new_take() or g_byte_array_free_to_bytes(). In all
* other cases the data is copied.
*
+ * Do not use it if @bytes contains more than %G_MAXUINT
+ * bytes. #GByteArray stores the length of its data in #guint, which
+ * may be shorter than #gsize, that @bytes is using.
+ *
* Returns: (transfer full): a new mutable #GByteArray containing the same byte data
*
* Since: 2.32
--- a/glib/tests/bytes.c
+++ b/glib/tests/bytes.c
@@ -10,12 +10,12 @@
*/
#undef G_DISABLE_ASSERT
-#undef G_LOG_DOMAIN
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "glib.h"
+#include "glib/gstrfuncsprivate.h"
/* Keep in sync with glib/gbytes.c */
struct _GBytes
@@ -334,6 +334,38 @@ test_to_array_transferred (void)
}
static void
+test_to_array_transferred_oversize (void)
+{
+ g_test_message ("g_bytes_unref_to_array() can only take GBytes up to "
+ "G_MAXUINT in length; test that longer ones are rejected");
+
+ if (sizeof (guint) >= sizeof (gsize))
+ {
+ g_test_skip ("Skipping test as guint is not smaller than gsize");
+ }
+ else if (g_test_undefined ())
+ {
+ GByteArray *array = NULL;
+ GBytes *bytes = NULL;
+ gpointer data = g_memdup2 (NYAN, N_NYAN);
+ gsize len = ((gsize) G_MAXUINT) + 1;
+
+ bytes = g_bytes_new_take (data, len);
+ g_test_expect_message (G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL,
+ "g_byte_array_new_take: assertion 'len <= G_MAXUINT' failed");
+ array = g_bytes_unref_to_array (g_steal_pointer (&bytes));
+ g_test_assert_expected_messages ();
+ g_assert_null (array);
+
+ g_free (data);
+ }
+ else
+ {
+ g_test_skip ("Skipping test as testing undefined behaviour is disabled");
+ }
+}
+
+static void
test_to_array_two_refs (void)
{
gconstpointer memory;
@@ -410,6 +442,7 @@ main (int argc, char *argv[])
g_test_add_func ("/bytes/to-array/transfered", test_to_array_transferred);
g_test_add_func ("/bytes/to-array/two-refs", test_to_array_two_refs);
g_test_add_func ("/bytes/to-array/non-malloc", test_to_array_non_malloc);
+ g_test_add_func ("/bytes/to-array/transferred/oversize", test_to_array_transferred_oversize);
g_test_add_func ("/bytes/null", test_null);
return g_test_run ();

View File

@@ -0,0 +1,170 @@
Backport of:
From 5e5f75a77e399c638be66d74e5daa8caeb433e00 Mon Sep 17 00:00:00 2001
From: Philip Withnall <pwithnall@endlessos.org>
Date: Thu, 4 Feb 2021 13:30:52 +0000
Subject: [PATCH 01/11] gstrfuncs: Add internal g_memdup2() function
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
This will replace the existing `g_memdup()` function for use within
GLib. It has an unavoidable security flaw of taking its `byte_size`
argument as a `guint` rather than as a `gsize`. Most callers will
expect it to be a `gsize`, and may pass in large values which could
silently be truncated, resulting in an undersize allocation compared
to what the caller expects.
This could lead to a classic buffer overflow vulnerability for many
callers of `g_memdup()`.
`g_memdup2()`, in comparison, takes its `byte_size` as a `gsize`.
Spotted by Kevin Backhouse of GHSL.
In GLib 2.68, `g_memdup2()` will be a new public API. In this version
for backport to older stable releases, its a new `static inline` API
in a private header, so that use of `g_memdup()` within GLib can be
fixed without adding a new API in a stable release series.
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
Helps: GHSL-2021-045
Helps: #2319
Upstream-Status: Backport [https://mirrors.ocf.berkeley.edu/ubuntu/pool/main/g/glib2.0/glib2.0_2.64.6-1~ubuntu20.04.3.debian.tar.xz]
CVE: CVE-2021-27219
Signed-off-by: Neetika Singh <Neetika.Singh@kpit.com>
Signed-off-by: Ranjitsinh Rathod <ranjitsinh.rathod@kpit.com>
---
docs/reference/glib/meson.build | 1 +
glib/gstrfuncsprivate.h | 55 +++++++++++++++++++++++++++++++++
glib/meson.build | 1 +
glib/tests/strfuncs.c | 23 ++++++++++++++
4 files changed, 80 insertions(+)
create mode 100644 glib/gstrfuncsprivate.h
--- a/docs/reference/glib/meson.build
+++ b/docs/reference/glib/meson.build
@@ -22,6 +22,7 @@ if get_option('gtk_doc')
'gprintfint.h',
'gmirroringtable.h',
'gscripttable.h',
+ 'gstrfuncsprivate.h',
'glib-mirroring-tab',
'gnulib',
'pcre',
--- /dev/null
+++ b/glib/gstrfuncsprivate.h
@@ -0,0 +1,55 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <glib.h>
+#include <string.h>
+
+/*
+ * g_memdup2:
+ * @mem: (nullable): the memory to copy.
+ * @byte_size: the number of bytes to copy.
+ *
+ * Allocates @byte_size bytes of memory, and copies @byte_size bytes into it
+ * from @mem. If @mem is %NULL it returns %NULL.
+ *
+ * This replaces g_memdup(), which was prone to integer overflows when
+ * converting the argument from a #gsize to a #guint.
+ *
+ * This static inline version is a backport of the new public API from
+ * GLib 2.68, kept internal to GLib for backport to older stable releases.
+ * See https://gitlab.gnome.org/GNOME/glib/-/issues/2319.
+ *
+ * Returns: (nullable): a pointer to the newly-allocated copy of the memory,
+ * or %NULL if @mem is %NULL.
+ * Since: 2.68
+ */
+static inline gpointer
+g_memdup2 (gconstpointer mem,
+ gsize byte_size)
+{
+ gpointer new_mem;
+
+ if (mem && byte_size != 0)
+ {
+ new_mem = g_malloc (byte_size);
+ memcpy (new_mem, mem, byte_size);
+ }
+ else
+ new_mem = NULL;
+
+ return new_mem;
+}
--- a/glib/meson.build
+++ b/glib/meson.build
@@ -268,6 +268,7 @@ glib_sources = files(
'gslist.c',
'gstdio.c',
'gstrfuncs.c',
+ 'gstrfuncsprivate.h',
'gstring.c',
'gstringchunk.c',
'gtestutils.c',
--- a/glib/tests/strfuncs.c
+++ b/glib/tests/strfuncs.c
@@ -32,6 +32,8 @@
#include <string.h>
#include "glib.h"
+#include "gstrfuncsprivate.h"
+
#if defined (_MSC_VER) && (_MSC_VER <= 1800)
#define isnan(x) _isnan(x)
@@ -219,6 +221,26 @@ test_memdup (void)
g_free (str_dup);
}
+/* Testing g_memdup2() function with various positive and negative cases */
+static void
+test_memdup2 (void)
+{
+ gchar *str_dup = NULL;
+ const gchar *str = "The quick brown fox jumps over the lazy dog";
+
+ /* Testing negative cases */
+ g_assert_null (g_memdup2 (NULL, 1024));
+ g_assert_null (g_memdup2 (str, 0));
+ g_assert_null (g_memdup2 (NULL, 0));
+
+ /* Testing normal usage cases */
+ str_dup = g_memdup2 (str, strlen (str) + 1);
+ g_assert_nonnull (str_dup);
+ g_assert_cmpstr (str, ==, str_dup);
+
+ g_free (str_dup);
+}
+
/* Testing g_strpcpy() function with various positive and negative cases */
static void
test_stpcpy (void)
@@ -2523,6 +2545,7 @@ main (int argc,
g_test_add_func ("/strfuncs/has-prefix", test_has_prefix);
g_test_add_func ("/strfuncs/has-suffix", test_has_suffix);
g_test_add_func ("/strfuncs/memdup", test_memdup);
+ g_test_add_func ("/strfuncs/memdup2", test_memdup2);
g_test_add_func ("/strfuncs/stpcpy", test_stpcpy);
g_test_add_func ("/strfuncs/str_match_string", test_str_match_string);
g_test_add_func ("/strfuncs/str_tokenize_and_fold", test_str_tokenize_and_fold);

View File

@@ -0,0 +1,249 @@
From be8834340a2d928ece82025463ae23dee2c333d0 Mon Sep 17 00:00:00 2001
From: Philip Withnall <pwithnall@endlessos.org>
Date: Thu, 4 Feb 2021 13:37:56 +0000
Subject: [PATCH 02/11] gio: Use g_memdup2() instead of g_memdup() in obvious
places
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Convert all the call sites which use `g_memdup()`s length argument
trivially (for example, by passing a `sizeof()`), so that they use
`g_memdup2()` instead.
In almost all of these cases the use of `g_memdup()` would not have
caused problems, but it will soon be deprecated, so best port away from
it.
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
Helps: #2319
Upstream-Status: Backport [https://mirrors.ocf.berkeley.edu/ubuntu/pool/main/g/glib2.0/glib2.0_2.64.6-1~ubuntu20.04.3.debian.tar.xz]
CVE: CVE-2021-27219
Signed-off-by: Neetika Singh <Neetika.Singh@kpit.com>
Signed-off-by: Ranjitsinh Rathod <ranjitsinh.rathod@kpit.com>
---
gio/gdbusconnection.c | 5 +++--
gio/gdbusinterfaceskeleton.c | 3 ++-
gio/gfile.c | 7 ++++---
gio/gsettingsschema.c | 5 +++--
gio/gwin32registrykey.c | 8 +++++---
gio/tests/async-close-output-stream.c | 6 ++++--
gio/tests/gdbus-export.c | 5 +++--
gio/win32/gwinhttpfile.c | 9 +++++----
8 files changed, 29 insertions(+), 19 deletions(-)
--- a/gio/gdbusconnection.c
+++ b/gio/gdbusconnection.c
@@ -110,6 +110,7 @@
#include "gasyncinitable.h"
#include "giostream.h"
#include "gasyncresult.h"
+#include "gstrfuncsprivate.h"
#include "gtask.h"
#include "gmarshal-internal.h"
@@ -4007,7 +4008,7 @@ _g_dbus_interface_vtable_copy (const GDB
/* Don't waste memory by copying padding - remember to update this
* when changing struct _GDBusInterfaceVTable in gdbusconnection.h
*/
- return g_memdup ((gconstpointer) vtable, 3 * sizeof (gpointer));
+ return g_memdup2 ((gconstpointer) vtable, 3 * sizeof (gpointer));
}
static void
@@ -4024,7 +4025,7 @@ _g_dbus_subtree_vtable_copy (const GDBus
/* Don't waste memory by copying padding - remember to update this
* when changing struct _GDBusSubtreeVTable in gdbusconnection.h
*/
- return g_memdup ((gconstpointer) vtable, 3 * sizeof (gpointer));
+ return g_memdup2 ((gconstpointer) vtable, 3 * sizeof (gpointer));
}
static void
--- a/gio/gdbusinterfaceskeleton.c
+++ b/gio/gdbusinterfaceskeleton.c
@@ -28,6 +28,7 @@
#include "gdbusmethodinvocation.h"
#include "gdbusconnection.h"
#include "gmarshal-internal.h"
+#include "gstrfuncsprivate.h"
#include "gtask.h"
#include "gioerror.h"
@@ -701,7 +702,7 @@ add_connection_locked (GDBusInterfaceSke
* properly before building the hooked_vtable, so we create it
* once at the last minute.
*/
- interface_->priv->hooked_vtable = g_memdup (g_dbus_interface_skeleton_get_vtable (interface_), sizeof (GDBusInterfaceVTable));
+ interface_->priv->hooked_vtable = g_memdup2 (g_dbus_interface_skeleton_get_vtable (interface_), sizeof (GDBusInterfaceVTable));
interface_->priv->hooked_vtable->method_call = skeleton_intercept_handle_method_call;
}
--- a/gio/gfile.c
+++ b/gio/gfile.c
@@ -60,6 +60,7 @@
#include "gasyncresult.h"
#include "gioerror.h"
#include "glibintl.h"
+#include "gstrfuncsprivate.h"
/**
@@ -7854,7 +7855,7 @@ measure_disk_usage_progress (gboolean re
g_main_context_invoke_full (g_task_get_context (task),
g_task_get_priority (task),
measure_disk_usage_invoke_progress,
- g_memdup (&progress, sizeof progress),
+ g_memdup2 (&progress, sizeof progress),
g_free);
}
@@ -7872,7 +7873,7 @@ measure_disk_usage_thread (GTask
data->progress_callback ? measure_disk_usage_progress : NULL, task,
&result.disk_usage, &result.num_dirs, &result.num_files,
&error))
- g_task_return_pointer (task, g_memdup (&result, sizeof result), g_free);
+ g_task_return_pointer (task, g_memdup2 (&result, sizeof result), g_free);
else
g_task_return_error (task, error);
}
@@ -7896,7 +7897,7 @@ g_file_real_measure_disk_usage_async (GF
task = g_task_new (file, cancellable, callback, user_data);
g_task_set_source_tag (task, g_file_real_measure_disk_usage_async);
- g_task_set_task_data (task, g_memdup (&data, sizeof data), g_free);
+ g_task_set_task_data (task, g_memdup2 (&data, sizeof data), g_free);
g_task_set_priority (task, io_priority);
g_task_run_in_thread (task, measure_disk_usage_thread);
--- a/gio/gsettingsschema.c
+++ b/gio/gsettingsschema.c
@@ -20,6 +20,7 @@
#include "gsettingsschema-internal.h"
#include "gsettings.h"
+#include "gstrfuncsprivate.h"
#include "gvdb/gvdb-reader.h"
#include "strinfo.c"
@@ -1067,9 +1068,9 @@ g_settings_schema_list_children (GSettin
if (g_str_has_suffix (key, "/"))
{
- gint length = strlen (key);
+ gsize length = strlen (key);
- strv[j] = g_memdup (key, length);
+ strv[j] = g_memdup2 (key, length);
strv[j][length - 1] = '\0';
j++;
}
--- a/gio/gwin32registrykey.c
+++ b/gio/gwin32registrykey.c
@@ -28,6 +28,8 @@
#include <ntstatus.h>
#include <winternl.h>
+#include "gstrfuncsprivate.h"
+
#ifndef _WDMDDK_
typedef enum _KEY_INFORMATION_CLASS {
KeyBasicInformation,
@@ -247,7 +249,7 @@ g_win32_registry_value_iter_copy (const
new_iter->value_name_size = iter->value_name_size;
if (iter->value_data != NULL)
- new_iter->value_data = g_memdup (iter->value_data, iter->value_data_size);
+ new_iter->value_data = g_memdup2 (iter->value_data, iter->value_data_size);
new_iter->value_data_size = iter->value_data_size;
@@ -268,8 +270,8 @@ g_win32_registry_value_iter_copy (const
new_iter->value_data_expanded_charsize = iter->value_data_expanded_charsize;
if (iter->value_data_expanded_u8 != NULL)
- new_iter->value_data_expanded_u8 = g_memdup (iter->value_data_expanded_u8,
- iter->value_data_expanded_charsize);
+ new_iter->value_data_expanded_u8 = g_memdup2 (iter->value_data_expanded_u8,
+ iter->value_data_expanded_charsize);
new_iter->value_data_expanded_u8_size = iter->value_data_expanded_charsize;
--- a/gio/tests/async-close-output-stream.c
+++ b/gio/tests/async-close-output-stream.c
@@ -24,6 +24,8 @@
#include <stdlib.h>
#include <string.h>
+#include "gstrfuncsprivate.h"
+
#define DATA_TO_WRITE "Hello world\n"
typedef struct
@@ -147,9 +149,9 @@ prepare_data (SetupData *data,
data->expected_size = g_memory_output_stream_get_data_size (G_MEMORY_OUTPUT_STREAM (data->data_stream));
- g_assert_cmpint (data->expected_size, >, 0);
+ g_assert_cmpuint (data->expected_size, >, 0);
- data->expected_output = g_memdup (written, (guint)data->expected_size);
+ data->expected_output = g_memdup2 (written, data->expected_size);
/* then recreate the streams and prepare them for the asynchronous close */
destroy_streams (data);
--- a/gio/tests/gdbus-export.c
+++ b/gio/tests/gdbus-export.c
@@ -23,6 +23,7 @@
#include <string.h>
#include "gdbus-tests.h"
+#include "gstrfuncsprivate.h"
/* all tests rely on a shared mainloop */
static GMainLoop *loop = NULL;
@@ -671,7 +672,7 @@ subtree_introspect (GDBusConnection
g_assert_not_reached ();
}
- return g_memdup (interfaces, 2 * sizeof (void *));
+ return g_memdup2 (interfaces, 2 * sizeof (void *));
}
static const GDBusInterfaceVTable *
@@ -727,7 +728,7 @@ dynamic_subtree_introspect (GDBusConnect
{
const GDBusInterfaceInfo *interfaces[2] = { &dyna_interface_info, NULL };
- return g_memdup (interfaces, 2 * sizeof (void *));
+ return g_memdup2 (interfaces, 2 * sizeof (void *));
}
static const GDBusInterfaceVTable *
--- a/gio/win32/gwinhttpfile.c
+++ b/gio/win32/gwinhttpfile.c
@@ -29,6 +29,7 @@
#include "gio/gfile.h"
#include "gio/gfileattribute.h"
#include "gio/gfileinfo.h"
+#include "gstrfuncsprivate.h"
#include "gwinhttpfile.h"
#include "gwinhttpfileinputstream.h"
#include "gwinhttpfileoutputstream.h"
@@ -393,10 +394,10 @@
child = g_object_new (G_TYPE_WINHTTP_FILE, NULL);
child->vfs = winhttp_file->vfs;
child->url = winhttp_file->url;
- child->url.lpszScheme = g_memdup (winhttp_file->url.lpszScheme, (winhttp_file->url.dwSchemeLength+1)*2);
- child->url.lpszHostName = g_memdup (winhttp_file->url.lpszHostName, (winhttp_file->url.dwHostNameLength+1)*2);
- child->url.lpszUserName = g_memdup (winhttp_file->url.lpszUserName, (winhttp_file->url.dwUserNameLength+1)*2);
- child->url.lpszPassword = g_memdup (winhttp_file->url.lpszPassword, (winhttp_file->url.dwPasswordLength+1)*2);
+ child->url.lpszScheme = g_memdup2 (winhttp_file->url.lpszScheme, (winhttp_file->url.dwSchemeLength+1)*2);
+ child->url.lpszHostName = g_memdup2 (winhttp_file->url.lpszHostName, (winhttp_file->url.dwHostNameLength+1)*2);
+ child->url.lpszUserName = g_memdup2 (winhttp_file->url.lpszUserName, (winhttp_file->url.dwUserNameLength+1)*2);
+ child->url.lpszPassword = g_memdup2 (winhttp_file->url.lpszPassword, (winhttp_file->url.dwPasswordLength+1)*2);
child->url.lpszUrlPath = wnew_path;
child->url.dwUrlPathLength = wcslen (wnew_path);
child->url.lpszExtraInfo = NULL;

View File

@@ -0,0 +1,131 @@
From 6110caea45b235420b98cd41d845cc92238f6781 Mon Sep 17 00:00:00 2001
From: Philip Withnall <pwithnall@endlessos.org>
Date: Thu, 4 Feb 2021 13:39:25 +0000
Subject: [PATCH 03/11] gobject: Use g_memdup2() instead of g_memdup() in
obvious places
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Convert all the call sites which use `g_memdup()`s length argument
trivially (for example, by passing a `sizeof()`), so that they use
`g_memdup2()` instead.
In almost all of these cases the use of `g_memdup()` would not have
caused problems, but it will soon be deprecated, so best port away from
it.
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
Helps: #2319
Upstream-Status: Backport [https://mirrors.ocf.berkeley.edu/ubuntu/pool/main/g/glib2.0/glib2.0_2.64.6-1~ubuntu20.04.3.debian.tar.xz]
CVE: CVE-2021-27219
Signed-off-by: Neetika Singh <Neetika.Singh@kpit.com>
Signed-off-by: Ranjitsinh Rathod <ranjitsinh.rathod@kpit.com>
---
gobject/gsignal.c | 3 ++-
gobject/gtype.c | 9 +++++----
gobject/gtypemodule.c | 3 ++-
gobject/tests/param.c | 4 +++-
4 files changed, 12 insertions(+), 7 deletions(-)
--- a/gobject/gsignal.c
+++ b/gobject/gsignal.c
@@ -28,6 +28,7 @@
#include <signal.h>
#include "gsignal.h"
+#include "gstrfuncsprivate.h"
#include "gtype-private.h"
#include "gbsearcharray.h"
#include "gvaluecollector.h"
@@ -1809,7 +1810,7 @@ g_signal_newv (const gchar *signal
node->single_va_closure_is_valid = FALSE;
node->flags = signal_flags & G_SIGNAL_FLAGS_MASK;
node->n_params = n_params;
- node->param_types = g_memdup (param_types, sizeof (GType) * n_params);
+ node->param_types = g_memdup2 (param_types, sizeof (GType) * n_params);
node->return_type = return_type;
node->class_closure_bsa = NULL;
if (accumulator)
--- a/gobject/gtype.c
+++ b/gobject/gtype.c
@@ -33,6 +33,7 @@
#include "glib-private.h"
#include "gconstructor.h"
+#include "gstrfuncsprivate.h"
#ifdef G_OS_WIN32
#include <windows.h>
@@ -1470,7 +1471,7 @@ type_add_interface_Wm (TypeNode
iholder->next = iface_node_get_holders_L (iface);
iface_node_set_holders_W (iface, iholder);
iholder->instance_type = NODE_TYPE (node);
- iholder->info = info ? g_memdup (info, sizeof (*info)) : NULL;
+ iholder->info = info ? g_memdup2 (info, sizeof (*info)) : NULL;
iholder->plugin = plugin;
/* create an iface entry for this type */
@@ -1731,7 +1732,7 @@ type_iface_retrieve_holder_info_Wm (Type
INVALID_RECURSION ("g_type_plugin_*", iholder->plugin, NODE_NAME (iface));
check_interface_info_I (iface, instance_type, &tmp_info);
- iholder->info = g_memdup (&tmp_info, sizeof (tmp_info));
+ iholder->info = g_memdup2 (&tmp_info, sizeof (tmp_info));
}
return iholder; /* we don't modify write lock upon returning NULL */
@@ -2016,10 +2017,10 @@ type_iface_vtable_base_init_Wm (TypeNode
IFaceEntry *pentry = type_lookup_iface_entry_L (pnode, iface);
if (pentry)
- vtable = g_memdup (pentry->vtable, iface->data->iface.vtable_size);
+ vtable = g_memdup2 (pentry->vtable, iface->data->iface.vtable_size);
}
if (!vtable)
- vtable = g_memdup (iface->data->iface.dflt_vtable, iface->data->iface.vtable_size);
+ vtable = g_memdup2 (iface->data->iface.dflt_vtable, iface->data->iface.vtable_size);
entry->vtable = vtable;
vtable->g_type = NODE_TYPE (iface);
vtable->g_instance_type = NODE_TYPE (node);
--- a/gobject/gtypemodule.c
+++ b/gobject/gtypemodule.c
@@ -19,6 +19,7 @@
#include <stdlib.h>
+#include "gstrfuncsprivate.h"
#include "gtypeplugin.h"
#include "gtypemodule.h"
@@ -436,7 +437,7 @@ g_type_module_register_type (GTypeModule
module_type_info->loaded = TRUE;
module_type_info->info = *type_info;
if (type_info->value_table)
- module_type_info->info.value_table = g_memdup (type_info->value_table,
+ module_type_info->info.value_table = g_memdup2 (type_info->value_table,
sizeof (GTypeValueTable));
return module_type_info->type;
--- a/gobject/tests/param.c
+++ b/gobject/tests/param.c
@@ -2,6 +2,8 @@
#include <glib-object.h>
#include <stdlib.h>
+#include "gstrfuncsprivate.h"
+
static void
test_param_value (void)
{
@@ -874,7 +876,7 @@ main (int argc, char *argv[])
test_path = g_strdup_printf ("/param/implement/subprocess/%d-%d-%d-%d",
data.change_this_flag, data.change_this_type,
data.use_this_flag, data.use_this_type);
- test_data = g_memdup (&data, sizeof (TestParamImplementData));
+ test_data = g_memdup2 (&data, sizeof (TestParamImplementData));
g_test_add_data_func_full (test_path, test_data, test_param_implement_child, g_free);
g_free (test_path);
}

View File

@@ -0,0 +1,298 @@
Backport of:
From 0736b7c1e7cf4232c5d7eb2b0fbfe9be81bd3baa Mon Sep 17 00:00:00 2001
From: Philip Withnall <pwithnall@endlessos.org>
Date: Thu, 4 Feb 2021 13:41:21 +0000
Subject: [PATCH 04/11] glib: Use g_memdup2() instead of g_memdup() in obvious
places
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Convert all the call sites which use `g_memdup()`s length argument
trivially (for example, by passing a `sizeof()` or an existing `gsize`
variable), so that they use `g_memdup2()` instead.
In almost all of these cases the use of `g_memdup()` would not have
caused problems, but it will soon be deprecated, so best port away from
it
In particular, this fixes an overflow within `g_bytes_new()`, identified
as GHSL-2021-045 by GHSL team member Kevin Backhouse.
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
Fixes: GHSL-2021-045
Helps: #2319
Upstream-Status: Backport [https://mirrors.ocf.berkeley.edu/ubuntu/pool/main/g/glib2.0/glib2.0_2.64.6-1~ubuntu20.04.3.debian.tar.xz]
CVE: CVE-2021-27219
Signed-off-by: Neetika Singh <Neetika.Singh@kpit.com>
Signed-off-by: Ranjitsinh Rathod <ranjitsinh.rathod@kpit.com>
---
glib/gbytes.c | 6 ++++--
glib/gdir.c | 3 ++-
glib/ghash.c | 7 ++++---
glib/giochannel.c | 5 +++--
glib/gslice.c | 3 ++-
glib/gtestutils.c | 3 ++-
glib/gvariant.c | 7 ++++---
glib/gvarianttype.c | 3 ++-
glib/tests/array-test.c | 4 +++-
glib/tests/option-context.c | 6 ++++--
glib/tests/uri.c | 8 +++++---
11 files changed, 35 insertions(+), 20 deletions(-)
--- a/glib/gbytes.c
+++ b/glib/gbytes.c
@@ -34,6 +34,8 @@
#include <string.h>
+#include "gstrfuncsprivate.h"
+
/**
* GBytes:
*
@@ -95,7 +97,7 @@ g_bytes_new (gconstpointer data,
{
g_return_val_if_fail (data != NULL || size == 0, NULL);
- return g_bytes_new_take (g_memdup (data, size), size);
+ return g_bytes_new_take (g_memdup2 (data, size), size);
}
/**
@@ -499,7 +501,7 @@ g_bytes_unref_to_data (GBytes *bytes,
* Copy: Non g_malloc (or compatible) allocator, or static memory,
* so we have to copy, and then unref.
*/
- result = g_memdup (bytes->data, bytes->size);
+ result = g_memdup2 (bytes->data, bytes->size);
*size = bytes->size;
g_bytes_unref (bytes);
}
--- a/glib/gdir.c
+++ b/glib/gdir.c
@@ -37,6 +37,7 @@
#include "gconvert.h"
#include "gfileutils.h"
#include "gstrfuncs.h"
+#include "gstrfuncsprivate.h"
#include "gtestutils.h"
#include "glibintl.h"
@@ -112,7 +113,7 @@ g_dir_open_with_errno (const gchar *path
return NULL;
#endif
- return g_memdup (&dir, sizeof dir);
+ return g_memdup2 (&dir, sizeof dir);
}
/**
--- a/glib/ghash.c
+++ b/glib/ghash.c
@@ -34,6 +34,7 @@
#include "gmacros.h"
#include "glib-private.h"
#include "gstrfuncs.h"
+#include "gstrfuncsprivate.h"
#include "gatomic.h"
#include "gtestutils.h"
#include "gslice.h"
@@ -962,7 +963,7 @@ g_hash_table_ensure_keyval_fits (GHashTa
if (hash_table->have_big_keys)
{
if (key != value)
- hash_table->values = g_memdup (hash_table->keys, sizeof (gpointer) * hash_table->size);
+ hash_table->values = g_memdup2 (hash_table->keys, sizeof (gpointer) * hash_table->size);
/* Keys and values are both big now, so no need for further checks */
return;
}
@@ -970,7 +971,7 @@ g_hash_table_ensure_keyval_fits (GHashTa
{
if (key != value)
{
- hash_table->values = g_memdup (hash_table->keys, sizeof (guint) * hash_table->size);
+ hash_table->values = g_memdup2 (hash_table->keys, sizeof (guint) * hash_table->size);
is_a_set = FALSE;
}
}
@@ -998,7 +999,7 @@ g_hash_table_ensure_keyval_fits (GHashTa
/* Just split if necessary */
if (is_a_set && key != value)
- hash_table->values = g_memdup (hash_table->keys, sizeof (gpointer) * hash_table->size);
+ hash_table->values = g_memdup2 (hash_table->keys, sizeof (gpointer) * hash_table->size);
#endif
}
--- a/glib/giochannel.c
+++ b/glib/giochannel.c
@@ -35,7 +35,7 @@
#include <errno.h>
#include "giochannel.h"
-
+#include "gstrfuncsprivate.h"
#include "gstrfuncs.h"
#include "gtestutils.h"
#include "glibintl.h"
@@ -1673,10 +1674,10 @@ g_io_channel_read_line (GIOChannel *cha
/* Copy the read bytes (including any embedded nuls) and nul-terminate.
* `USE_BUF (channel)->str` is guaranteed to be nul-terminated as its a
- * #GString, so its safe to call g_memdup() with +1 length to allocate
+ * #GString, so its safe to call g_memdup2() with +1 length to allocate
* a nul-terminator. */
g_assert (USE_BUF (channel));
- line = g_memdup (USE_BUF (channel)->str, got_length + 1);
+ line = g_memdup2 (USE_BUF (channel)->str, got_length + 1);
line[got_length] = '\0';
*str_return = g_steal_pointer (&line);
g_string_erase (USE_BUF (channel), 0, got_length);
--- a/glib/gslice.c
+++ b/glib/gslice.c
@@ -41,6 +41,7 @@
#include "gmain.h"
#include "gmem.h" /* gslice.h */
#include "gstrfuncs.h"
+#include "gstrfuncsprivate.h"
#include "gutils.h"
#include "gtrashstack.h"
#include "gtestutils.h"
@@ -350,7 +351,7 @@ g_slice_get_config_state (GSliceConfig c
array[i++] = allocator->contention_counters[address];
array[i++] = allocator_get_magazine_threshold (allocator, address);
*n_values = i;
- return g_memdup (array, sizeof (array[0]) * *n_values);
+ return g_memdup2 (array, sizeof (array[0]) * *n_values);
default:
return NULL;
}
--- a/glib/gtestutils.c
+++ b/glib/gtestutils.c
@@ -49,6 +49,7 @@
#include "gpattern.h"
#include "grand.h"
#include "gstrfuncs.h"
+#include "gstrfuncsprivate.h"
#include "gtimer.h"
#include "gslice.h"
#include "gspawn.h"
@@ -3803,7 +3804,7 @@ g_test_log_extract (GTestLogBuffer *tbuf
if (p <= tbuffer->data->str + mlength)
{
g_string_erase (tbuffer->data, 0, mlength);
- tbuffer->msgs = g_slist_prepend (tbuffer->msgs, g_memdup (&msg, sizeof (msg)));
+ tbuffer->msgs = g_slist_prepend (tbuffer->msgs, g_memdup2 (&msg, sizeof (msg)));
return TRUE;
}
--- a/glib/gvariant.c
+++ b/glib/gvariant.c
@@ -33,6 +33,7 @@
#include <string.h>
+#include "gstrfuncsprivate.h"
/**
* SECTION:gvariant
@@ -725,7 +726,7 @@ g_variant_new_variant (GVariant *value)
g_variant_ref_sink (value);
return g_variant_new_from_children (G_VARIANT_TYPE_VARIANT,
- g_memdup (&value, sizeof value),
+ g_memdup2 (&value, sizeof value),
1, g_variant_is_trusted (value));
}
@@ -1229,7 +1230,7 @@ g_variant_new_fixed_array (const GVarian
return NULL;
}
- data = g_memdup (elements, n_elements * element_size);
+ data = g_memdup2 (elements, n_elements * element_size);
value = g_variant_new_from_data (array_type, data,
n_elements * element_size,
FALSE, g_free, data);
@@ -1908,7 +1909,7 @@ g_variant_dup_bytestring (GVariant *valu
if (length)
*length = size;
- return g_memdup (original, size + 1);
+ return g_memdup2 (original, size + 1);
}
/**
--- a/glib/gvarianttype.c
+++ b/glib/gvarianttype.c
@@ -28,6 +28,7 @@
#include <string.h>
+#include "gstrfuncsprivate.h"
/**
* SECTION:gvarianttype
@@ -1181,7 +1182,7 @@ g_variant_type_new_tuple (const GVariant
g_assert (offset < sizeof buffer);
buffer[offset++] = ')';
- return (GVariantType *) g_memdup (buffer, offset);
+ return (GVariantType *) g_memdup2 (buffer, offset);
}
/**
--- a/glib/tests/array-test.c
+++ b/glib/tests/array-test.c
@@ -29,6 +29,8 @@
#include <string.h>
#include "glib.h"
+#include "gstrfuncsprivate.h"
+
/* Test data to be passed to any function which calls g_array_new(), providing
* the parameters for that call. Most #GArray tests should be repeated for all
* possible values of #ArrayTestData. */
@@ -1917,7 +1919,7 @@ byte_array_new_take (void)
GByteArray *gbarray;
guint8 *data;
- data = g_memdup ("woooweeewow", 11);
+ data = g_memdup2 ("woooweeewow", 11);
gbarray = g_byte_array_new_take (data, 11);
g_assert (gbarray->data == data);
g_assert_cmpuint (gbarray->len, ==, 11);
--- a/glib/tests/option-context.c
+++ b/glib/tests/option-context.c
@@ -27,6 +27,8 @@
#include <string.h>
#include <locale.h>
+#include "gstrfuncsprivate.h"
+
static GOptionEntry main_entries[] = {
{ "main-switch", 0, 0,
G_OPTION_ARG_NONE, NULL,
@@ -256,7 +258,7 @@ join_stringv (int argc, char **argv)
static char **
copy_stringv (char **argv, int argc)
{
- return g_memdup (argv, sizeof (char *) * (argc + 1));
+ return g_memdup2 (argv, sizeof (char *) * (argc + 1));
}
static void
@@ -2323,7 +2325,7 @@ test_group_parse (void)
g_option_context_add_group (context, group);
argv = split_string ("program --test arg1 -f arg2 --group-test arg3 --frob arg4 -z arg5", &argc);
- orig_argv = g_memdup (argv, (argc + 1) * sizeof (char *));
+ orig_argv = g_memdup2 (argv, (argc + 1) * sizeof (char *));
retval = g_option_context_parse (context, &argc, &argv, &error);

View File

@@ -0,0 +1,54 @@
From 0cbad673215ec8a049b7fe2ff44b0beed31b376e Mon Sep 17 00:00:00 2001
From: Philip Withnall <pwithnall@endlessos.org>
Date: Thu, 4 Feb 2021 16:12:24 +0000
Subject: [PATCH 05/11] gwinhttpfile: Avoid arithmetic overflow when
calculating a size
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
The members of `URL_COMPONENTS` (`winhttp_file->url`) are `DWORD`s, i.e.
32-bit unsigned integers. Adding to and multiplying them may cause them
to overflow the unsigned integer bounds, even if the result is passed to
`g_memdup2()` which accepts a `gsize`.
Cast the `URL_COMPONENTS` members to `gsize` first to ensure that the
arithmetic is done in terms of `gsize`s rather than unsigned integers.
Spotted by Sebastian Dröge.
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
Helps: #2319
Upstream-Status: Backport [https://mirrors.ocf.berkeley.edu/ubuntu/pool/main/g/glib2.0/glib2.0_2.64.6-1~ubuntu20.04.3.debian.tar.xz]
CVE: CVE-2021-27219
Signed-off-by: Neetika Singh <Neetika.Singh@kpit.com>
Signed-off-by: Ranjitsinh Rathod <ranjitsinh.rathod@kpit.com>
---
gio/win32/gwinhttpfile.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/gio/win32/gwinhttpfile.c b/gio/win32/gwinhttpfile.c
index 3f8fbd838..e0340e247 100644
--- a/gio/win32/gwinhttpfile.c
+++ b/gio/win32/gwinhttpfile.c
@@ -410,10 +410,10 @@ g_winhttp_file_resolve_relative_path (GFile *file,
child = g_object_new (G_TYPE_WINHTTP_FILE, NULL);
child->vfs = winhttp_file->vfs;
child->url = winhttp_file->url;
- child->url.lpszScheme = g_memdup2 (winhttp_file->url.lpszScheme, (winhttp_file->url.dwSchemeLength+1)*2);
- child->url.lpszHostName = g_memdup2 (winhttp_file->url.lpszHostName, (winhttp_file->url.dwHostNameLength+1)*2);
- child->url.lpszUserName = g_memdup2 (winhttp_file->url.lpszUserName, (winhttp_file->url.dwUserNameLength+1)*2);
- child->url.lpszPassword = g_memdup2 (winhttp_file->url.lpszPassword, (winhttp_file->url.dwPasswordLength+1)*2);
+ child->url.lpszScheme = g_memdup2 (winhttp_file->url.lpszScheme, ((gsize) winhttp_file->url.dwSchemeLength + 1) * 2);
+ child->url.lpszHostName = g_memdup2 (winhttp_file->url.lpszHostName, ((gsize) winhttp_file->url.dwHostNameLength + 1) * 2);
+ child->url.lpszUserName = g_memdup2 (winhttp_file->url.lpszUserName, ((gsize) winhttp_file->url.dwUserNameLength + 1) * 2);
+ child->url.lpszPassword = g_memdup2 (winhttp_file->url.lpszPassword, ((gsize) winhttp_file->url.dwPasswordLength + 1) * 2);
child->url.lpszUrlPath = wnew_path;
child->url.dwUrlPathLength = wcslen (wnew_path);
child->url.lpszExtraInfo = NULL;
--
GitLab

View File

@@ -0,0 +1,101 @@
From f9ee2275cbc312c0b4cdbc338a4fbb76eb36fb9a Mon Sep 17 00:00:00 2001
From: Philip Withnall <pwithnall@endlessos.org>
Date: Thu, 4 Feb 2021 13:49:00 +0000
Subject: [PATCH 06/11] gdatainputstream: Handle stop_chars_len internally as
gsize
Previously it was handled as a `gssize`, which meant that if the
`stop_chars` string was longer than `G_MAXSSIZE` there would be an
overflow.
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
Helps: #2319
Upstream-Status: Backport [https://mirrors.ocf.berkeley.edu/ubuntu/pool/main/g/glib2.0/glib2.0_2.64.6-1~ubuntu20.04.3.debian.tar.xz]
CVE: CVE-2021-27219
Signed-off-by: Neetika Singh <Neetika.Singh@kpit.com>
Signed-off-by: Ranjitsinh Rathod <ranjitsinh.rathod@kpit.com>
---
gio/gdatainputstream.c | 25 +++++++++++++++++--------
1 file changed, 17 insertions(+), 8 deletions(-)
diff --git a/gio/gdatainputstream.c b/gio/gdatainputstream.c
index 2e7750cb5..2cdcbda19 100644
--- a/gio/gdatainputstream.c
+++ b/gio/gdatainputstream.c
@@ -27,6 +27,7 @@
#include "gioenumtypes.h"
#include "gioerror.h"
#include "glibintl.h"
+#include "gstrfuncsprivate.h"
#include <string.h>
@@ -856,7 +857,7 @@ static gssize
scan_for_chars (GDataInputStream *stream,
gsize *checked_out,
const char *stop_chars,
- gssize stop_chars_len)
+ gsize stop_chars_len)
{
GBufferedInputStream *bstream;
const char *buffer;
@@ -952,7 +953,7 @@ typedef struct
gsize checked;
gchar *stop_chars;
- gssize stop_chars_len;
+ gsize stop_chars_len;
gsize length;
} GDataInputStreamReadData;
@@ -1078,12 +1079,17 @@ g_data_input_stream_read_async (GDataInputStream *stream,
{
GDataInputStreamReadData *data;
GTask *task;
+ gsize stop_chars_len_unsigned;
data = g_slice_new0 (GDataInputStreamReadData);
- if (stop_chars_len == -1)
- stop_chars_len = strlen (stop_chars);
- data->stop_chars = g_memdup (stop_chars, stop_chars_len);
- data->stop_chars_len = stop_chars_len;
+
+ if (stop_chars_len < 0)
+ stop_chars_len_unsigned = strlen (stop_chars);
+ else
+ stop_chars_len_unsigned = (gsize) stop_chars_len;
+
+ data->stop_chars = g_memdup2 (stop_chars, stop_chars_len_unsigned);
+ data->stop_chars_len = stop_chars_len_unsigned;
data->last_saw_cr = FALSE;
task = g_task_new (stream, cancellable, callback, user_data);
@@ -1338,17 +1344,20 @@ g_data_input_stream_read_upto (GDataInputStream *stream,
gssize found_pos;
gssize res;
char *data_until;
+ gsize stop_chars_len_unsigned;
g_return_val_if_fail (G_IS_DATA_INPUT_STREAM (stream), NULL);
if (stop_chars_len < 0)
- stop_chars_len = strlen (stop_chars);
+ stop_chars_len_unsigned = strlen (stop_chars);
+ else
+ stop_chars_len_unsigned = (gsize) stop_chars_len;
bstream = G_BUFFERED_INPUT_STREAM (stream);
checked = 0;
- while ((found_pos = scan_for_chars (stream, &checked, stop_chars, stop_chars_len)) == -1)
+ while ((found_pos = scan_for_chars (stream, &checked, stop_chars, stop_chars_len_unsigned)) == -1)
{
if (g_buffered_input_stream_get_available (bstream) ==
g_buffered_input_stream_get_buffer_size (bstream))
--
GitLab

View File

@@ -0,0 +1,76 @@
From 2aaf593a9eb96d84fe3be740aca2810a97d95592 Mon Sep 17 00:00:00 2001
From: Philip Withnall <pwithnall@endlessos.org>
Date: Thu, 4 Feb 2021 13:50:37 +0000
Subject: [PATCH 07/11] gwin32: Use gsize internally in g_wcsdup()
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
This allows it to handle strings up to length `G_MAXSIZE` — previously
it would overflow with such strings.
Update the several copies of it identically.
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
Helps: #2319
Upstream-Status: Backport [https://mirrors.ocf.berkeley.edu/ubuntu/pool/main/g/glib2.0/glib2.0_2.64.6-1~ubuntu20.04.3.debian.tar.xz]
CVE: CVE-2021-27219
Signed-off-by: Neetika Singh <Neetika.Singh@kpit.com>
Signed-off-by: Ranjitsinh Rathod <ranjitsinh.rathod@kpit.com>
---
gio/gwin32registrykey.c | 34 ++++++++++++++++++++++++++--------
2 files changed, 38 insertions(+), 16 deletions(-)
diff --git a/gio/gwin32registrykey.c b/gio/gwin32registrykey.c
index 548a94188..2eb67daf8 100644
--- a/gio/gwin32registrykey.c
+++ b/gio/gwin32registrykey.c
@@ -127,16 +127,34 @@ typedef enum
G_WIN32_REGISTRY_UPDATED_PATH = 1,
} GWin32RegistryKeyUpdateFlag;
+static gsize
+g_utf16_len (const gunichar2 *str)
+{
+ gsize result;
+
+ for (result = 0; str[0] != 0; str++, result++)
+ ;
+
+ return result;
+}
+
static gunichar2 *
-g_wcsdup (const gunichar2 *str,
- gssize str_size)
+g_wcsdup (const gunichar2 *str, gssize str_len)
{
- if (str_size == -1)
- {
- str_size = wcslen (str) + 1;
- str_size *= sizeof (gunichar2);
- }
- return g_memdup (str, str_size);
+ gsize str_len_unsigned;
+ gsize str_size;
+
+ g_return_val_if_fail (str != NULL, NULL);
+
+ if (str_len < 0)
+ str_len_unsigned = g_utf16_len (str);
+ else
+ str_len_unsigned = (gsize) str_len;
+
+ g_assert (str_len_unsigned <= G_MAXSIZE / sizeof (gunichar2) - 1);
+ str_size = (str_len_unsigned + 1) * sizeof (gunichar2);
+
+ return g_memdup2 (str, str_size);
}
/**
--
GitLab

View File

@@ -0,0 +1,101 @@
From ba8ca443051f93a74c0d03d62e70402036f967a5 Mon Sep 17 00:00:00 2001
From: Philip Withnall <pwithnall@endlessos.org>
Date: Thu, 4 Feb 2021 13:58:32 +0000
Subject: [PATCH 08/11] gkeyfilesettingsbackend: Handle long keys when
converting paths
Previously, the code in `convert_path()` could not handle keys longer
than `G_MAXINT`, and would overflow if that was exceeded.
Convert the code to use `gsize` and `g_memdup2()` throughout, and
change from identifying the position of the final slash in the string
using a signed offset `i`, to using a pointer to the character (and
`strrchr()`). This allows the slash to be at any position in a
`G_MAXSIZE`-long string, without sacrificing a bit of the offset for
indicating whether a slash was found.
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
Helps: #2319
Upstream-Status: Backport [https://mirrors.ocf.berkeley.edu/ubuntu/pool/main/g/glib2.0/glib2.0_2.64.6-1~ubuntu20.04.3.debian.tar.xz]
CVE: CVE-2021-27219
Signed-off-by: Neetika Singh <Neetika.Singh@kpit.com>
Signed-off-by: Ranjitsinh Rathod <ranjitsinh.rathod@kpit.com>
---
gio/gkeyfilesettingsbackend.c | 21 ++++++++++-----------
1 file changed, 10 insertions(+), 11 deletions(-)
diff --git a/gio/gkeyfilesettingsbackend.c b/gio/gkeyfilesettingsbackend.c
index cd5765afd..25b057672 100644
--- a/gio/gkeyfilesettingsbackend.c
+++ b/gio/gkeyfilesettingsbackend.c
@@ -33,6 +33,7 @@
#include "gfilemonitor.h"
#include "gsimplepermission.h"
#include "gsettingsbackendinternal.h"
+#include "gstrfuncsprivate.h"
#include "giomodule-priv.h"
#include "gportalsupport.h"
@@ -145,8 +146,8 @@ convert_path (GKeyfileSettingsBackend *kfsb,
gchar **group,
gchar **basename)
{
- gint key_len = strlen (key);
- gint i;
+ gsize key_len = strlen (key);
+ const gchar *last_slash;
if (key_len < kfsb->prefix_len ||
memcmp (key, kfsb->prefix, kfsb->prefix_len) != 0)
@@ -155,38 +156,36 @@ convert_path (GKeyfileSettingsBackend *kfsb,
key_len -= kfsb->prefix_len;
key += kfsb->prefix_len;
- for (i = key_len; i >= 0; i--)
- if (key[i] == '/')
- break;
+ last_slash = strrchr (key, '/');
if (kfsb->root_group)
{
/* if a root_group was specified, make sure the user hasn't given
* a path that ghosts that group name
*/
- if (i == kfsb->root_group_len && memcmp (key, kfsb->root_group, i) == 0)
+ if (last_slash != NULL && (last_slash - key) == kfsb->root_group_len && memcmp (key, kfsb->root_group, last_slash - key) == 0)
return FALSE;
}
else
{
/* if no root_group was given, ensure that the user gave a path */
- if (i == -1)
+ if (last_slash == NULL)
return FALSE;
}
if (group)
{
- if (i >= 0)
+ if (last_slash != NULL)
{
- *group = g_memdup (key, i + 1);
- (*group)[i] = '\0';
+ *group = g_memdup2 (key, (last_slash - key) + 1);
+ (*group)[(last_slash - key)] = '\0';
}
else
*group = g_strdup (kfsb->root_group);
}
if (basename)
- *basename = g_memdup (key + i + 1, key_len - i);
+ *basename = g_memdup2 (last_slash + 1, key_len - (last_slash - key));
return TRUE;
}
--
GitLab

View File

@@ -0,0 +1,100 @@
From 65ec7f4d6e8832c481f6e00e2eb007b9a60024ce Mon Sep 17 00:00:00 2001
From: Philip Withnall <pwithnall@endlessos.org>
Date: Thu, 4 Feb 2021 14:00:53 +0000
Subject: [PATCH 09/11] =?UTF-8?q?gsocket:=20Use=20gsize=20to=20track=20nat?=
=?UTF-8?q?ive=20sockaddr=E2=80=99s=20size?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Dont use an `int`, thats potentially too small. In practical terms,
this is not a problem, since no socket address is going to be that big.
By making these changes we can use `g_memdup2()` without warnings,
though. Fewer warnings is good.
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
Helps: #2319
Upstream-Status: Backport [https://mirrors.ocf.berkeley.edu/ubuntu/pool/main/g/glib2.0/glib2.0_2.64.6-1~ubuntu20.04.3.debian.tar.xz]
CVE: CVE-2021-27219
Signed-off-by: Neetika Singh <Neetika.Singh@kpit.com>
Signed-off-by: Ranjitsinh Rathod <ranjitsinh.rathod@kpit.com>
---
gio/gsocket.c | 16 ++++++++++------
1 file changed, 10 insertions(+), 6 deletions(-)
--- a/gio/gsocket.c
+++ b/gio/gsocket.c
@@ -75,6 +75,7 @@
#include "gcredentialsprivate.h"
#include "glibintl.h"
#include "gioprivate.h"
+#include "gstrfuncsprivate.h"
#ifdef G_OS_WIN32
/* For Windows XP runtime compatibility, but use the system's if_nametoindex() if available */
@@ -174,7 +175,7 @@ static gboolean g_socket_datagram_ba
GError **error);
static GSocketAddress *
-cache_recv_address (GSocket *socket, struct sockaddr *native, int native_len);
+cache_recv_address (GSocket *socket, struct sockaddr *native, size_t native_len);
static gssize
g_socket_receive_message_with_timeout (GSocket *socket,
@@ -260,7 +261,7 @@ struct _GSocketPrivate
struct {
GSocketAddress *addr;
struct sockaddr *native;
- gint native_len;
+ gsize native_len;
guint64 last_used;
} recv_addr_cache[RECV_ADDR_CACHE_SIZE];
};
@@ -5259,14 +5260,14 @@ g_socket_send_messages_with_timeout (GSo
}
static GSocketAddress *
-cache_recv_address (GSocket *socket, struct sockaddr *native, int native_len)
+cache_recv_address (GSocket *socket, struct sockaddr *native, size_t native_len)
{
GSocketAddress *saddr;
gint i;
guint64 oldest_time = G_MAXUINT64;
gint oldest_index = 0;
- if (native_len <= 0)
+ if (native_len == 0)
return NULL;
saddr = NULL;
@@ -5274,7 +5275,7 @@ cache_recv_address (GSocket *socket, str
{
GSocketAddress *tmp = socket->priv->recv_addr_cache[i].addr;
gpointer tmp_native = socket->priv->recv_addr_cache[i].native;
- gint tmp_native_len = socket->priv->recv_addr_cache[i].native_len;
+ gsize tmp_native_len = socket->priv->recv_addr_cache[i].native_len;
if (!tmp)
continue;
@@ -5304,7 +5305,7 @@ cache_recv_address (GSocket *socket, str
g_free (socket->priv->recv_addr_cache[oldest_index].native);
}
- socket->priv->recv_addr_cache[oldest_index].native = g_memdup (native, native_len);
+ socket->priv->recv_addr_cache[oldest_index].native = g_memdup2 (native, native_len);
socket->priv->recv_addr_cache[oldest_index].native_len = native_len;
socket->priv->recv_addr_cache[oldest_index].addr = g_object_ref (saddr);
socket->priv->recv_addr_cache[oldest_index].last_used = g_get_monotonic_time ();
@@ -5452,6 +5453,9 @@ g_socket_receive_message_with_timeout (G
/* do it */
while (1)
{
+ /* addrlen has to be of type int because thats how WSARecvFrom() is defined */
+ G_STATIC_ASSERT (sizeof addr <= G_MAXINT);
+
addrlen = sizeof addr;
if (address)
result = WSARecvFrom (socket->priv->fd,

View File

@@ -0,0 +1,59 @@
From 777b95a88f006d39d9fe6d3321db17e7b0d4b9a4 Mon Sep 17 00:00:00 2001
From: Philip Withnall <pwithnall@endlessos.org>
Date: Thu, 4 Feb 2021 14:07:39 +0000
Subject: [PATCH 10/11] gtlspassword: Forbid very long TLS passwords
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
The public API `g_tls_password_set_value_full()` (and the vfunc it
invokes) can only accept a `gssize` length. Ensure that nul-terminated
strings passed to `g_tls_password_set_value()` cant exceed that length.
Use `g_memdup2()` to avoid an overflow if theyre longer than
`G_MAXUINT` similarly.
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
Helps: #2319
Upstream-Status: Backport [https://mirrors.ocf.berkeley.edu/ubuntu/pool/main/g/glib2.0/glib2.0_2.64.6-1~ubuntu20.04.3.debian.tar.xz]
CVE: CVE-2021-27219
Signed-off-by: Neetika Singh <Neetika.Singh@kpit.com>
Signed-off-by: Ranjitsinh Rathod <ranjitsinh.rathod@kpit.com>
---
gio/gtlspassword.c | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/gio/gtlspassword.c b/gio/gtlspassword.c
index 1e437a7b6..dbcec41a8 100644
--- a/gio/gtlspassword.c
+++ b/gio/gtlspassword.c
@@ -23,6 +23,7 @@
#include "glibintl.h"
#include "gioenumtypes.h"
+#include "gstrfuncsprivate.h"
#include "gtlspassword.h"
#include <string.h>
@@ -287,9 +288,14 @@ g_tls_password_set_value (GTlsPassword *password,
g_return_if_fail (G_IS_TLS_PASSWORD (password));
if (length < 0)
- length = strlen ((gchar *)value);
+ {
+ /* FIXME: g_tls_password_set_value_full() doesnt support unsigned gsize */
+ gsize length_unsigned = strlen ((gchar *) value);
+ g_return_if_fail (length_unsigned > G_MAXSSIZE);
+ length = (gssize) length_unsigned;
+ }
- g_tls_password_set_value_full (password, g_memdup (value, length), length, g_free);
+ g_tls_password_set_value_full (password, g_memdup2 (value, (gsize) length), length, g_free);
}
/**
--
GitLab

View File

@@ -0,0 +1,63 @@
From ecdf91400e9a538695a0895b95ad7e8abcdf1749 Mon Sep 17 00:00:00 2001
From: Philip Withnall <pwithnall@endlessos.org>
Date: Thu, 4 Feb 2021 14:09:40 +0000
Subject: [PATCH 11/11] giochannel: Forbid very long line terminator strings
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
The public API `GIOChannel.line_term_len` is only a `guint`. Ensure that
nul-terminated strings passed to `g_io_channel_set_line_term()` cant
exceed that length. Use `g_memdup2()` to avoid a warning (`g_memdup()`
is due to be deprecated), but not to avoid a bug, since its also
limited to `G_MAXUINT`.
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
Helps: #2319
Upstream-Status: Backport [https://mirrors.ocf.berkeley.edu/ubuntu/pool/main/g/glib2.0/glib2.0_2.64.6-1~ubuntu20.04.3.debian.tar.xz]
CVE: CVE-2021-27219
Signed-off-by: Neetika Singh <Neetika.Singh@kpit.com>
Signed-off-by: Ranjitsinh Rathod <ranjitsinh.rathod@kpit.com>
---
glib/giochannel.c | 17 +++++++++++++----
1 file changed, 13 insertions(+), 4 deletions(-)
diff --git a/glib/giochannel.c b/glib/giochannel.c
index c6a89d6e0..4dec20f77 100644
--- a/glib/giochannel.c
+++ b/glib/giochannel.c
@@ -887,16 +887,25 @@ g_io_channel_set_line_term (GIOChannel *channel,
const gchar *line_term,
gint length)
{
+ guint length_unsigned;
+
g_return_if_fail (channel != NULL);
g_return_if_fail (line_term == NULL || length != 0); /* Disallow "" */
if (line_term == NULL)
- length = 0;
- else if (length < 0)
- length = strlen (line_term);
+ length_unsigned = 0;
+ else if (length >= 0)
+ length_unsigned = (guint) length;
+ else
+ {
+ /* FIXME: Were constrained by line_term_len being a guint here */
+ gsize length_size = strlen (line_term);
+ g_return_if_fail (length_size > G_MAXUINT);
+ length_unsigned = (guint) length_size;
+ }
g_free (channel->line_term);
- channel->line_term = line_term ? g_memdup (line_term, length) : NULL;
+ channel->line_term = line_term ? g_memdup2 (line_term, length_unsigned) : NULL;
channel->line_term_len = length;
}
--
GitLab

View File

@@ -0,0 +1,36 @@
From f8273b9aded135fe07094faebd527e43851aaf6e Mon Sep 17 00:00:00 2001
From: "Jan Alexander Steffens (heftig)" <jan.steffens@gmail.com>
Date: Sun, 7 Feb 2021 23:32:40 +0100
Subject: [PATCH 1/5] giochannel: Fix length_size bounds check
The inverted condition is an obvious error introduced by ecdf91400e9a.
Fixes https://gitlab.gnome.org/GNOME/glib/-/issues/2323
(cherry picked from commit a149bf2f9030168051942124536e303af8ba6176)
Upstream-Status: Backport [https://mirrors.ocf.berkeley.edu/ubuntu/pool/main/g/glib2.0/glib2.0_2.64.6-1~ubuntu20.04.3.debian.tar.xz]
CVE: CVE-2021-27219
Signed-off-by: Ranjitsinh Rathod <ranjitsinh.rathod@kpit.com>
---
glib/giochannel.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/glib/giochannel.c b/glib/giochannel.c
index 4dec20f77..c3f3102ff 100644
--- a/glib/giochannel.c
+++ b/glib/giochannel.c
@@ -896,7 +896,7 @@ g_io_channel_set_line_term (GIOChannel *channel,
{
/* FIXME: Were constrained by line_term_len being a guint here */
gsize length_size = strlen (line_term);
- g_return_if_fail (length_size > G_MAXUINT);
+ g_return_if_fail (length_size <= G_MAXUINT);
length_unsigned = (guint) length_size;
}
--
GitLab

View File

@@ -0,0 +1,38 @@
From e069c50467712e6d607822afd6b6c15c2c343dff Mon Sep 17 00:00:00 2001
From: Simon McVittie <smcv@collabora.com>
Date: Mon, 8 Feb 2021 10:34:50 +0000
Subject: [PATCH 2/5] giochannel: Don't store negative line_term_len in
GIOChannel struct
Adding test coverage indicated that this was another bug in 0cc11f74.
Fixes: 0cc11f74 "giochannel: Forbid very long line terminator strings"
Resolves: https://gitlab.gnome.org/GNOME/glib/-/issues/2323
Signed-off-by: Simon McVittie <smcv@collabora.com>
(cherry picked from commit 5dc8b0014c03e7491d93b90275ab442e888a9628)
Upstream-Status: Backport [https://mirrors.ocf.berkeley.edu/ubuntu/pool/main/g/glib2.0/glib2.0_2.64.6-1~ubuntu20.04.3.debian.tar.xz]
CVE: CVE-2021-27219
Signed-off-by: Ranjitsinh Rathod <ranjitsinh.rathod@kpit.com>
---
glib/giochannel.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/glib/giochannel.c b/glib/giochannel.c
index c3f3102ff..19bb06ba6 100644
--- a/glib/giochannel.c
+++ b/glib/giochannel.c
@@ -902,7 +902,7 @@ g_io_channel_set_line_term (GIOChannel *channel,
g_free (channel->line_term);
channel->line_term = line_term ? g_memdup2 (line_term, length_unsigned) : NULL;
- channel->line_term_len = length;
+ channel->line_term_len = length_unsigned;
}
/**
--
GitLab

View File

@@ -0,0 +1,38 @@
From 4506d1859a863087598c8d122740bae25b65b099 Mon Sep 17 00:00:00 2001
From: Simon McVittie <smcv@collabora.com>
Date: Mon, 8 Feb 2021 10:04:48 +0000
Subject: [PATCH 4/5] gtlspassword: Fix inverted assertion
The intention here was to assert that the length of the password fits
in a gssize. Passwords more than half the size of virtual memory are
probably excessive.
Fixes: a8b204ff "gtlspassword: Forbid very long TLS passwords"
Signed-off-by: Simon McVittie <smcv@collabora.com>
(cherry picked from commit 61bb52ec42de1082bfb06ce1c737fc295bfe60b8)
Upstream-Status: Backport [https://mirrors.ocf.berkeley.edu/ubuntu/pool/main/g/glib2.0/glib2.0_2.64.6-1~ubuntu20.04.3.debian.tar.xz]
CVE: CVE-2021-27219
Signed-off-by: Ranjitsinh Rathod <ranjitsinh.rathod@kpit.com>
---
gio/gtlspassword.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/gio/gtlspassword.c b/gio/gtlspassword.c
index dbcec41a8..bd86a6dfe 100644
--- a/gio/gtlspassword.c
+++ b/gio/gtlspassword.c
@@ -291,7 +291,7 @@ g_tls_password_set_value (GTlsPassword *password,
{
/* FIXME: g_tls_password_set_value_full() doesnt support unsigned gsize */
gsize length_unsigned = strlen ((gchar *) value);
- g_return_if_fail (length_unsigned > G_MAXSSIZE);
+ g_return_if_fail (length_unsigned <= G_MAXSSIZE);
length = (gssize) length_unsigned;
}
--
GitLab

View File

@@ -0,0 +1,100 @@
From 3d1550354c3c6a8491c39881752d51cb7515f2c2 Mon Sep 17 00:00:00 2001
From: Simon McVittie <smcv@collabora.com>
Date: Mon, 8 Feb 2021 10:22:39 +0000
Subject: [PATCH 5/5] tls-interaction: Add test coverage for various ways to
set the password
Signed-off-by: Simon McVittie <smcv@collabora.com>
(cherry picked from commit df4501316ca3903072400504a5ea76498db19538)
Upstream-Status: Backport [https://mirrors.ocf.berkeley.edu/ubuntu/pool/main/g/glib2.0/glib2.0_2.64.6-1~ubuntu20.04.3.debian.tar.xz]
CVE: CVE-2021-27219
Signed-off-by: Ranjitsinh Rathod <ranjitsinh.rathod@kpit.com>
---
gio/tests/tls-interaction.c | 55 +++++++++++++++++++++++++++++++++++++
1 file changed, 55 insertions(+)
diff --git a/gio/tests/tls-interaction.c b/gio/tests/tls-interaction.c
index 4f0737d7e..5661e8e0d 100644
--- a/gio/tests/tls-interaction.c
+++ b/gio/tests/tls-interaction.c
@@ -174,6 +174,38 @@ test_interaction_ask_password_finish_failure (GTlsInteraction *interaction,
}
+/* Return a copy of @str that is allocated in a silly way, to exercise
+ * custom free-functions. The returned pointer points to a copy of @str
+ * in a buffer of the form "BEFORE \0 str \0 AFTER". */
+static guchar *
+special_dup (const char *str)
+{
+ GString *buf = g_string_new ("BEFORE");
+ guchar *ret;
+
+ g_string_append_c (buf, '\0');
+ g_string_append (buf, str);
+ g_string_append_c (buf, '\0');
+ g_string_append (buf, "AFTER");
+ ret = (guchar *) g_string_free (buf, FALSE);
+ return ret + strlen ("BEFORE") + 1;
+}
+
+
+/* Free a copy of @str that was made with special_dup(), after asserting
+ * that it has not been corrupted. */
+static void
+special_free (gpointer p)
+{
+ gchar *s = p;
+ gchar *buf = s - strlen ("BEFORE") - 1;
+
+ g_assert_cmpstr (buf, ==, "BEFORE");
+ g_assert_cmpstr (s + strlen (s) + 1, ==, "AFTER");
+ g_free (buf);
+}
+
+
static GTlsInteractionResult
test_interaction_ask_password_sync_success (GTlsInteraction *interaction,
GTlsPassword *password,
@@ -181,6 +213,8 @@ test_interaction_ask_password_sync_success (GTlsInteraction *interaction,
GError **error)
{
TestInteraction *self;
+ const guchar *value;
+ gsize len;
g_assert (TEST_IS_INTERACTION (interaction));
self = TEST_INTERACTION (interaction);
@@ -192,6 +226,27 @@ test_interaction_ask_password_sync_success (GTlsInteraction *interaction,
g_assert (error != NULL);
g_assert (*error == NULL);
+ /* Exercise different ways to set the value */
+ g_tls_password_set_value (password, (const guchar *) "foo", 4);
+ len = 0;
+ value = g_tls_password_get_value (password, &len);
+ g_assert_cmpmem (value, len, "foo", 4);
+
+ g_tls_password_set_value (password, (const guchar *) "bar", -1);
+ len = 0;
+ value = g_tls_password_get_value (password, &len);
+ g_assert_cmpmem (value, len, "bar", 3);
+
+ g_tls_password_set_value_full (password, special_dup ("baa"), 4, special_free);
+ len = 0;
+ value = g_tls_password_get_value (password, &len);
+ g_assert_cmpmem (value, len, "baa", 4);
+
+ g_tls_password_set_value_full (password, special_dup ("baz"), -1, special_free);
+ len = 0;
+ value = g_tls_password_get_value (password, &len);
+ g_assert_cmpmem (value, len, "baz", 3);
+
/* Don't do this in real life. Include a null terminator for testing */
g_tls_password_set_value (password, (const guchar *)"the password", 13);
return G_TLS_INTERACTION_HANDLED;
--
GitLab

View File

@@ -0,0 +1,49 @@
From cb9ee701ef46c1819eed4e2a4dc181682bdfc176 Mon Sep 17 00:00:00 2001
From: Philip Withnall <pwithnall@endlessos.org>
Date: Wed, 10 Feb 2021 21:16:39 +0000
Subject: [PATCH 1/3] gkeyfilesettingsbackend: Fix basename handling when group
is unset
Fix an effective regression in commit
7781a9cbd2fd0aa84bee0f4eee88470640ff6706, which happens when
`convert_path()` is called with a `key` which contains no slashes. In
that case, the `key` is entirely the `basename`.
Prior to commit 7781a9cb, the code worked through a fluke of `i == -1`
cancelling out with the various additions in the `g_memdup()` call, and
effectively resulting in `g_strdup (key)`.
Spotted by Guido Berhoerster.
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
Upstream-Status: Backport [https://mirrors.ocf.berkeley.edu/ubuntu/pool/main/g/glib2.0/glib2.0_2.64.6-1~ubuntu20.04.3.debian.tar.xz]
CVE: CVE-2021-27219
Signed-off-by: Ranjitsinh Rathod <ranjitsinh.rathod@kpit.com>
---
gio/gkeyfilesettingsbackend.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/gio/gkeyfilesettingsbackend.c b/gio/gkeyfilesettingsbackend.c
index 25b057672..861c3a661 100644
--- a/gio/gkeyfilesettingsbackend.c
+++ b/gio/gkeyfilesettingsbackend.c
@@ -185,7 +185,12 @@ convert_path (GKeyfileSettingsBackend *kfsb,
}
if (basename)
- *basename = g_memdup2 (last_slash + 1, key_len - (last_slash - key));
+ {
+ if (last_slash != NULL)
+ *basename = g_memdup2 (last_slash + 1, key_len - (last_slash - key));
+ else
+ *basename = g_strdup (key);
+ }
return TRUE;
}
--
GitLab

View File

@@ -0,0 +1,43 @@
From 31e0d403ba635dbbacbfbff74295e5db02558d76 Mon Sep 17 00:00:00 2001
From: Philip Withnall <pwithnall@endlessos.org>
Date: Wed, 10 Feb 2021 21:19:30 +0000
Subject: [PATCH 2/3] gkeyfilesettingsbackend: Disallow empty key or group
names
These should never have been allowed; they will result in precondition
failures from the `GKeyFile` later on in the code.
A test will be added for this shortly.
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
Upstream-Status: Backport [https://mirrors.ocf.berkeley.edu/ubuntu/pool/main/g/glib2.0/glib2.0_2.64.6-1~ubuntu20.04.3.debian.tar.xz]
CVE: CVE-2021-27219
Signed-off-by: Ranjitsinh Rathod <ranjitsinh.rathod@kpit.com>
---
gio/gkeyfilesettingsbackend.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/gio/gkeyfilesettingsbackend.c b/gio/gkeyfilesettingsbackend.c
index 861c3a661..de216e615 100644
--- a/gio/gkeyfilesettingsbackend.c
+++ b/gio/gkeyfilesettingsbackend.c
@@ -158,6 +158,13 @@ convert_path (GKeyfileSettingsBackend *kfsb,
last_slash = strrchr (key, '/');
+ /* Disallow empty group names or key names */
+ if (key_len == 0 ||
+ (last_slash != NULL &&
+ (*(last_slash + 1) == '\0' ||
+ last_slash == key)))
+ return FALSE;
+
if (kfsb->root_group)
{
/* if a root_group was specified, make sure the user hasn't given
--
GitLab

View File

@@ -0,0 +1,232 @@
Backport of:
From 221c26685354dea2b2732df94404e8e5e77a1591 Mon Sep 17 00:00:00 2001
From: Philip Withnall <pwithnall@endlessos.org>
Date: Wed, 10 Feb 2021 21:21:36 +0000
Subject: [PATCH 3/3] tests: Add tests for key name handling in the keyfile
backend
This tests the two recent commits.
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
Upstream-Status: Backport [https://mirrors.ocf.berkeley.edu/ubuntu/pool/main/g/glib2.0/glib2.0_2.64.6-1~ubuntu20.04.3.debian.tar.xz]
CVE: CVE-2021-27219
Signed-off-by: Ranjitsinh Rathod <ranjitsinh.rathod@kpit.com>
---
gio/tests/gsettings.c | 170 +++++++++++++++++++++++++++++++++++++++++-
1 file changed, 169 insertions(+), 1 deletion(-)
--- a/gio/tests/gsettings.c
+++ b/gio/tests/gsettings.c
@@ -1,3 +1,4 @@
+#include <errno.h>
#include <stdlib.h>
#include <locale.h>
#include <libintl.h>
@@ -1740,6 +1741,14 @@ key_changed_cb (GSettings *settings, con
(*b) = TRUE;
}
+typedef struct
+{
+ const gchar *path;
+ const gchar *root_group;
+ const gchar *keyfile_group;
+ const gchar *root_path;
+} KeyfileTestData;
+
/*
* Test that using a keyfile works
*/
@@ -1834,7 +1843,11 @@ test_keyfile (Fixture *fixture,
g_free (str);
g_settings_set (settings, "farewell", "s", "cheerio");
-
+
+ /* Check that empty keys/groups are not allowed. */
+ g_assert_false (g_settings_is_writable (settings, ""));
+ g_assert_false (g_settings_is_writable (settings, "/"));
+
/* When executing as root, changing the mode of the keyfile will have
* no effect on the writability of the settings.
*/
@@ -1866,6 +1879,149 @@ test_keyfile (Fixture *fixture,
g_free (keyfile_path);
}
+/*
+ * Test that using a keyfile works with a schema with no path set.
+ */
+static void
+test_keyfile_no_path (Fixture *fixture,
+ gconstpointer user_data)
+{
+ const KeyfileTestData *test_data = user_data;
+ GSettingsBackend *kf_backend;
+ GSettings *settings;
+ GKeyFile *keyfile;
+ gboolean writable;
+ gchar *key = NULL;
+ GError *error = NULL;
+ gchar *keyfile_path = NULL, *store_path = NULL;
+
+ keyfile_path = g_build_filename (fixture->tmp_dir, "keyfile", NULL);
+ store_path = g_build_filename (keyfile_path, "gsettings.store", NULL);
+ kf_backend = g_keyfile_settings_backend_new (store_path, test_data->root_path, test_data->root_group);
+ settings = g_settings_new_with_backend_and_path ("org.gtk.test.no-path", kf_backend, test_data->path);
+ g_object_unref (kf_backend);
+
+ g_settings_reset (settings, "test-boolean");
+ g_assert_true (g_settings_get_boolean (settings, "test-boolean"));
+
+ writable = g_settings_is_writable (settings, "test-boolean");
+ g_assert_true (writable);
+ g_settings_set (settings, "test-boolean", "b", FALSE);
+
+ g_assert_false (g_settings_get_boolean (settings, "test-boolean"));
+
+ g_settings_delay (settings);
+ g_settings_set (settings, "test-boolean", "b", TRUE);
+ g_settings_apply (settings);
+
+ keyfile = g_key_file_new ();
+ g_assert_true (g_key_file_load_from_file (keyfile, store_path, 0, NULL));
+
+ g_assert_true (g_key_file_get_boolean (keyfile, test_data->keyfile_group, "test-boolean", NULL));
+
+ g_key_file_free (keyfile);
+
+ g_settings_reset (settings, "test-boolean");
+ g_settings_apply (settings);
+ keyfile = g_key_file_new ();
+ g_assert_true (g_key_file_load_from_file (keyfile, store_path, 0, NULL));
+
+ g_assert_false (g_key_file_get_string (keyfile, test_data->keyfile_group, "test-boolean", &error));
+ g_assert_error (error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND);
+ g_clear_error (&error);
+
+ /* Check that empty keys/groups are not allowed. */
+ g_assert_false (g_settings_is_writable (settings, ""));
+ g_assert_false (g_settings_is_writable (settings, "/"));
+
+ /* Keys which ghost the root group name are not allowed. This can only be
+ * tested when the path is `/` as otherwise it acts as a prefix and prevents
+ * any ghosting. */
+ if (g_str_equal (test_data->path, "/"))
+ {
+ key = g_strdup_printf ("%s/%s", test_data->root_group, "");
+ g_assert_false (g_settings_is_writable (settings, key));
+ g_free (key);
+
+ key = g_strdup_printf ("%s/%s", test_data->root_group, "/");
+ g_assert_false (g_settings_is_writable (settings, key));
+ g_free (key);
+
+ key = g_strdup_printf ("%s/%s", test_data->root_group, "test-boolean");
+ g_assert_false (g_settings_is_writable (settings, key));
+ g_free (key);
+ }
+
+ g_key_file_free (keyfile);
+ g_object_unref (settings);
+
+ /* Clean up the temporary directory. */
+ g_assert_cmpint (g_chmod (keyfile_path, 0777) == 0 ? 0 : errno, ==, 0);
+ g_assert_cmpint (g_remove (store_path) == 0 ? 0 : errno, ==, 0);
+ g_assert_cmpint (g_rmdir (keyfile_path) == 0 ? 0 : errno, ==, 0);
+ g_free (store_path);
+ g_free (keyfile_path);
+}
+
+/*
+ * Test that a keyfile rejects writes to keys outside its root path.
+ */
+static void
+test_keyfile_outside_root_path (Fixture *fixture,
+ gconstpointer user_data)
+{
+ GSettingsBackend *kf_backend;
+ GSettings *settings;
+ gchar *keyfile_path = NULL, *store_path = NULL;
+
+ keyfile_path = g_build_filename (fixture->tmp_dir, "keyfile", NULL);
+ store_path = g_build_filename (keyfile_path, "gsettings.store", NULL);
+ kf_backend = g_keyfile_settings_backend_new (store_path, "/tests/basic-types/", "root");
+ settings = g_settings_new_with_backend_and_path ("org.gtk.test.no-path", kf_backend, "/tests/");
+ g_object_unref (kf_backend);
+
+ g_assert_false (g_settings_is_writable (settings, "test-boolean"));
+
+ g_object_unref (settings);
+
+ /* Clean up the temporary directory. The keyfile probably doesnt exist, so
+ * dont error on failure. */
+ g_remove (store_path);
+ g_assert_cmpint (g_rmdir (keyfile_path) == 0 ? 0 : errno, ==, 0);
+ g_free (store_path);
+ g_free (keyfile_path);
+}
+
+/*
+ * Test that a keyfile rejects writes to keys in the root if no root group is set.
+ */
+static void
+test_keyfile_no_root_group (Fixture *fixture,
+ gconstpointer user_data)
+{
+ GSettingsBackend *kf_backend;
+ GSettings *settings;
+ gchar *keyfile_path = NULL, *store_path = NULL;
+
+ keyfile_path = g_build_filename (fixture->tmp_dir, "keyfile", NULL);
+ store_path = g_build_filename (keyfile_path, "gsettings.store", NULL);
+ kf_backend = g_keyfile_settings_backend_new (store_path, "/", NULL);
+ settings = g_settings_new_with_backend_and_path ("org.gtk.test.no-path", kf_backend, "/");
+ g_object_unref (kf_backend);
+
+ g_assert_false (g_settings_is_writable (settings, "test-boolean"));
+ g_assert_true (g_settings_is_writable (settings, "child/test-boolean"));
+
+ g_object_unref (settings);
+
+ /* Clean up the temporary directory. The keyfile probably doesnt exist, so
+ * dont error on failure. */
+ g_remove (store_path);
+ g_assert_cmpint (g_rmdir (keyfile_path) == 0 ? 0 : errno, ==, 0);
+ g_free (store_path);
+ g_free (keyfile_path);
+}
+
/* Test that getting child schemas works
*/
static void
@@ -2844,6 +3000,14 @@ main (int argc, char *argv[])
gchar *override_text;
gchar *enums;
gint result;
+ const KeyfileTestData keyfile_test_data_explicit_path = { "/tests/", "root", "tests", "/" };
+ const KeyfileTestData keyfile_test_data_empty_path = { "/", "root", "root", "/" };
+ const KeyfileTestData keyfile_test_data_long_path = {
+ "/tests/path/is/very/long/and/this/makes/some/comparisons/take/a/different/branch/",
+ "root",
+ "tests/path/is/very/long/and/this/makes/some/comparisons/take/a/different/branch",
+ "/"
+ };
/* Meson build sets this */
#ifdef TEST_LOCALE_PATH
@@ -2967,6 +3131,11 @@ main (int argc, char *argv[])
}
g_test_add ("/gsettings/keyfile", Fixture, NULL, setup, test_keyfile, teardown);
+ g_test_add ("/gsettings/keyfile/explicit-path", Fixture, &keyfile_test_data_explicit_path, setup, test_keyfile_no_path, teardown);
+ g_test_add ("/gsettings/keyfile/empty-path", Fixture, &keyfile_test_data_empty_path, setup, test_keyfile_no_path, teardown);
+ g_test_add ("/gsettings/keyfile/long-path", Fixture, &keyfile_test_data_long_path, setup, test_keyfile_no_path, teardown);
+ g_test_add ("/gsettings/keyfile/outside-root-path", Fixture, NULL, setup, test_keyfile_outside_root_path, teardown);
+ g_test_add ("/gsettings/keyfile/no-root-group", Fixture, NULL, setup, test_keyfile_no_root_group, teardown);
g_test_add_func ("/gsettings/child-schema", test_child_schema);
g_test_add_func ("/gsettings/strinfo", test_strinfo);
g_test_add_func ("/gsettings/enums", test_enums);

View File

@@ -0,0 +1,27 @@
From 78420a75aeb70569a8cd79fa0fea7b786b6f785f Mon Sep 17 00:00:00 2001
From: Philip Withnall <pwithnall@endlessos.org>
Date: Wed, 24 Feb 2021 17:33:38 +0000
Subject: [PATCH 1/5] glocalfileoutputstream: Fix a typo in a comment
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
Upstream-Status: Backport [https://mirrors.ocf.berkeley.edu/ubuntu/pool/main/g/glib2.0/glib2.0_2.64.6-1~ubuntu20.04.3.debian.tar.xz]
CVE: CVE-2021-28153
Signed-off-by: Neetika Singh <Neetika.Singh@kpit.com>
Signed-off-by: Ranjitsinh Rathod <ranjitsinh.rathod@kpit.com>
---
gio/glocalfileoutputstream.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/gio/glocalfileoutputstream.c
+++ b/gio/glocalfileoutputstream.c
@@ -851,7 +851,7 @@ handle_overwrite_open (const char *fi
mode = mode_from_flags_or_info (flags, reference_info);
/* We only need read access to the original file if we are creating a backup.
- * We also add O_CREATE to avoid a race if the file was just removed */
+ * We also add O_CREAT to avoid a race if the file was just removed */
if (create_backup || readable)
open_flags = O_RDWR | O_CREAT | O_BINARY;
else

View File

@@ -0,0 +1,42 @@
From 32d3d02a50e7dcec5f4cf7908e7ac88d575d8fc5 Mon Sep 17 00:00:00 2001
From: Philip Withnall <pwithnall@endlessos.org>
Date: Wed, 24 Feb 2021 17:34:32 +0000
Subject: [PATCH 2/5] tests: Stop using g_test_bug_base() in file tests
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Since a following commit is going to add a new test which references
Gitlab, so its best to move the URI bases inside the test cases.
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
Upstream-Status: Backport [https://mirrors.ocf.berkeley.edu/ubuntu/pool/main/g/glib2.0/glib2.0_2.64.6-1~ubuntu20.04.3.debian.tar.xz]
CVE: CVE-2021-28153
Signed-off-by: Neetika Singh <Neetika.Singh@kpit.com>
Signed-off-by: Ranjitsinh Rathod <ranjitsinh.rathod@kpit.com>
---
gio/tests/file.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
--- a/gio/tests/file.c
+++ b/gio/tests/file.c
@@ -685,7 +685,7 @@ test_replace_cancel (void)
guint count;
GError *error = NULL;
- g_test_bug ("629301");
+ g_test_bug ("https://bugzilla.gnome.org/629301");
path = g_dir_make_tmp ("g_file_replace_cancel_XXXXXX", &error);
g_assert_no_error (error);
@@ -1784,8 +1784,6 @@ main (int argc, char *argv[])
{
g_test_init (&argc, &argv, NULL);
- g_test_bug_base ("http://bugzilla.gnome.org/");
-
g_test_add_func ("/file/basic", test_basic);
g_test_add_func ("/file/build-filename", test_build_filename);
g_test_add_func ("/file/parent", test_parent);

View File

@@ -0,0 +1,57 @@
Backport of:
From ce0eb088a68171eed3ac217cb92a72e36eb57d1b Mon Sep 17 00:00:00 2001
From: Philip Withnall <pwithnall@endlessos.org>
Date: Wed, 10 Mar 2021 16:05:55 +0000
Subject: [PATCH 3/5] glocalfileoutputstream: Factor out a flag check
This clarifies the code a little. It introduces no functional changes.
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
Upstream-Status: Backport [https://mirrors.ocf.berkeley.edu/ubuntu/pool/main/g/glib2.0/glib2.0_2.64.6-1~ubuntu20.04.3.debian.tar.xz]
CVE: CVE-2021-28153
Signed-off-by: Neetika Singh <Neetika.Singh@kpit.com>
Signed-off-by: Ranjitsinh Rathod <ranjitsinh.rathod@kpit.com>
---
gio/glocalfileoutputstream.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
--- a/gio/glocalfileoutputstream.c
+++ b/gio/glocalfileoutputstream.c
@@ -847,6 +847,7 @@ handle_overwrite_open (const char *fi
int res;
int mode;
int errsv;
+ gboolean replace_destination_set = (flags & G_FILE_CREATE_REPLACE_DESTINATION);
mode = mode_from_flags_or_info (flags, reference_info);
@@ -954,7 +955,7 @@ handle_overwrite_open (const char *fi
* to a backup file and rewrite the contents of the file.
*/
- if ((flags & G_FILE_CREATE_REPLACE_DESTINATION) ||
+ if (replace_destination_set ||
(!(original_stat.st_nlink > 1) && !is_symlink))
{
char *dirname, *tmp_filename;
@@ -973,7 +974,7 @@ handle_overwrite_open (const char *fi
/* try to keep permissions (unless replacing) */
- if ( ! (flags & G_FILE_CREATE_REPLACE_DESTINATION) &&
+ if (!replace_destination_set &&
(
#ifdef HAVE_FCHOWN
fchown (tmpfd, original_stat.st_uid, original_stat.st_gid) == -1 ||
@@ -1112,7 +1113,7 @@ handle_overwrite_open (const char *fi
}
}
- if (flags & G_FILE_CREATE_REPLACE_DESTINATION)
+ if (replace_destination_set)
{
g_close (fd, NULL);

View File

@@ -0,0 +1,265 @@
Backport of:
From 317b3b587058a05dca95d56dac26568c5b098d33 Mon Sep 17 00:00:00 2001
From: Philip Withnall <pwithnall@endlessos.org>
Date: Wed, 24 Feb 2021 17:36:07 +0000
Subject: [PATCH 4/5] glocalfileoutputstream: Fix CREATE_REPLACE_DESTINATION
with symlinks
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
The `G_FILE_CREATE_REPLACE_DESTINATION` flag is equivalent to unlinking
the destination file and re-creating it from scratch. That did
previously work, but in the process the code would call `open(O_CREAT)`
on the file. If the file was a dangling symlink, this would create the
destination file (empty). Thats not an intended side-effect, and has
security implications if the symlink is controlled by a lower-privileged
process.
Fix that by not opening the destination file if its a symlink, and
adjusting the rest of the code to cope with
- the fact that `fd == -1` is not an error iff `is_symlink` is true,
- and that `original_stat` will contain the `lstat()` results for the
symlink now, rather than the `stat()` results for its target (again,
iff `is_symlink` is true).
This means that the target of the dangling symlink is no longer created,
which was the bug. The symlink itself continues to be replaced (as
before) with the new file — this is the intended behaviour of
`g_file_replace()`.
The behaviour for non-symlink cases, or cases where the symlink was not
dangling, should be unchanged.
Includes a unit test.
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
Fixes: #2325
Upstream-Status: Backport [https://mirrors.ocf.berkeley.edu/ubuntu/pool/main/g/glib2.0/glib2.0_2.64.6-1~ubuntu20.04.3.debian.tar.xz]
CVE: CVE-2021-28153
Signed-off-by: Neetika Singh <Neetika.Singh@kpit.com>
Signed-off-by: Ranjitsinh Rathod <ranjitsinh.rathod@kpit.com>
---
gio/glocalfileoutputstream.c | 77 ++++++++++++++++++-------
gio/tests/file.c | 108 +++++++++++++++++++++++++++++++++++
2 files changed, 163 insertions(+), 22 deletions(-)
--- a/gio/glocalfileoutputstream.c
+++ b/gio/glocalfileoutputstream.c
@@ -875,16 +875,22 @@ handle_overwrite_open (const char *fi
/* Could be a symlink, or it could be a regular ELOOP error,
* but then the next open will fail too. */
is_symlink = TRUE;
- fd = g_open (filename, open_flags, mode);
+ if (!replace_destination_set)
+ fd = g_open (filename, open_flags, mode);
}
-#else
- fd = g_open (filename, open_flags, mode);
- errsv = errno;
+#else /* if !O_NOFOLLOW */
/* This is racy, but we do it as soon as possible to minimize the race */
is_symlink = g_file_test (filename, G_FILE_TEST_IS_SYMLINK);
+
+ if (!is_symlink || !replace_destination_set)
+ {
+ fd = g_open (filename, open_flags, mode);
+ errsv = errno;
+ }
#endif
- if (fd == -1)
+ if (fd == -1 &&
+ (!is_symlink || !replace_destination_set))
{
char *display_name = g_filename_display_name (filename);
g_set_error (error, G_IO_ERROR,
@@ -898,7 +904,14 @@ handle_overwrite_open (const char *fi
#ifdef G_OS_WIN32
res = GLIB_PRIVATE_CALL (g_win32_fstat) (fd, &original_stat);
#else
- res = fstat (fd, &original_stat);
+ if (!is_symlink)
+ {
+ res = fstat (fd, &original_stat);
+ }
+ else
+ {
+ res = lstat (filename, &original_stat);
+ }
#endif
errsv = errno;
@@ -917,16 +930,27 @@ handle_overwrite_open (const char *fi
if (!S_ISREG (original_stat.st_mode))
{
if (S_ISDIR (original_stat.st_mode))
- g_set_error_literal (error,
- G_IO_ERROR,
- G_IO_ERROR_IS_DIRECTORY,
- _("Target file is a directory"));
- else
- g_set_error_literal (error,
+ {
+ g_set_error_literal (error,
+ G_IO_ERROR,
+ G_IO_ERROR_IS_DIRECTORY,
+ _("Target file is a directory"));
+ goto err_out;
+ }
+ else if (!is_symlink ||
+#ifdef S_ISLNK
+ !S_ISLNK (original_stat.st_mode)
+#else
+ FALSE
+#endif
+ )
+ {
+ g_set_error_literal (error,
G_IO_ERROR,
G_IO_ERROR_NOT_REGULAR_FILE,
_("Target file is not a regular file"));
- goto err_out;
+ goto err_out;
+ }
}
if (etag != NULL)
@@ -1007,7 +1031,8 @@ handle_overwrite_open (const char *fi
}
}
- g_close (fd, NULL);
+ if (fd >= 0)
+ g_close (fd, NULL);
*temp_filename = tmp_filename;
return tmpfd;
}
--- a/gio/tests/file.c
+++ b/gio/tests/file.c
@@ -804,6 +804,113 @@ test_replace_cancel (void)
g_object_unref (tmpdir);
}
+static void
+test_replace_symlink (void)
+{
+#ifdef G_OS_UNIX
+ gchar *tmpdir_path = NULL;
+ GFile *tmpdir = NULL, *source_file = NULL, *target_file = NULL;
+ GFileOutputStream *stream = NULL;
+ const gchar *new_contents = "this is a test message which should be written to source and not target";
+ gsize n_written;
+ GFileEnumerator *enumerator = NULL;
+ GFileInfo *info = NULL;
+ gchar *contents = NULL;
+ gsize length = 0;
+ GError *local_error = NULL;
+
+ g_test_bug ("https://gitlab.gnome.org/GNOME/glib/-/issues/2325");
+ g_test_summary ("Test that G_FILE_CREATE_REPLACE_DESTINATION doesnt follow symlinks");
+
+ /* Create a fresh, empty working directory. */
+ tmpdir_path = g_dir_make_tmp ("g_file_replace_symlink_XXXXXX", &local_error);
+ g_assert_no_error (local_error);
+ tmpdir = g_file_new_for_path (tmpdir_path);
+
+ g_test_message ("Using temporary directory %s", tmpdir_path);
+ g_free (tmpdir_path);
+
+ /* Create symlink `source` which points to `target`. */
+ source_file = g_file_get_child (tmpdir, "source");
+ target_file = g_file_get_child (tmpdir, "target");
+ g_file_make_symbolic_link (source_file, "target", NULL, &local_error);
+ g_assert_no_error (local_error);
+
+ /* Ensure that `target` doesnt exist */
+ g_assert_false (g_file_query_exists (target_file, NULL));
+
+ /* Replace the `source` symlink with a regular file using
+ * %G_FILE_CREATE_REPLACE_DESTINATION, which should replace it *without*
+ * following the symlink */
+ stream = g_file_replace (source_file, NULL, FALSE /* no backup */,
+ G_FILE_CREATE_REPLACE_DESTINATION, NULL, &local_error);
+ g_assert_no_error (local_error);
+
+ g_output_stream_write_all (G_OUTPUT_STREAM (stream), new_contents, strlen (new_contents),
+ &n_written, NULL, &local_error);
+ g_assert_no_error (local_error);
+ g_assert_cmpint (n_written, ==, strlen (new_contents));
+
+ g_output_stream_close (G_OUTPUT_STREAM (stream), NULL, &local_error);
+ g_assert_no_error (local_error);
+
+ g_clear_object (&stream);
+
+ /* At this point, there should still only be one file: `source`. It should
+ * now be a regular file. `target` should not exist. */
+ enumerator = g_file_enumerate_children (tmpdir,
+ G_FILE_ATTRIBUTE_STANDARD_NAME ","
+ G_FILE_ATTRIBUTE_STANDARD_TYPE,
+ G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, NULL, &local_error);
+ g_assert_no_error (local_error);
+
+ info = g_file_enumerator_next_file (enumerator, NULL, &local_error);
+ g_assert_no_error (local_error);
+ g_assert_nonnull (info);
+
+ g_assert_cmpstr (g_file_info_get_name (info), ==, "source");
+ g_assert_cmpint (g_file_info_get_file_type (info), ==, G_FILE_TYPE_REGULAR);
+
+ g_clear_object (&info);
+
+ info = g_file_enumerator_next_file (enumerator, NULL, &local_error);
+ g_assert_no_error (local_error);
+ g_assert_null (info);
+
+ g_file_enumerator_close (enumerator, NULL, &local_error);
+ g_assert_no_error (local_error);
+ g_clear_object (&enumerator);
+
+ /* Double-check that `target` doesnt exist */
+ g_assert_false (g_file_query_exists (target_file, NULL));
+
+ /* Check the content of `source`. */
+ g_file_load_contents (source_file,
+ NULL,
+ &contents,
+ &length,
+ NULL,
+ &local_error);
+ g_assert_no_error (local_error);
+ g_assert_cmpstr (contents, ==, new_contents);
+ g_assert_cmpuint (length, ==, strlen (new_contents));
+ g_free (contents);
+
+ /* Tidy up. */
+ g_file_delete (source_file, NULL, &local_error);
+ g_assert_no_error (local_error);
+
+ g_file_delete (tmpdir, NULL, &local_error);
+ g_assert_no_error (local_error);
+
+ g_clear_object (&target_file);
+ g_clear_object (&source_file);
+ g_clear_object (&tmpdir);
+#else /* if !G_OS_UNIX */
+ g_test_skip ("Symlink replacement tests can only be run on Unix")
+#endif
+}
+
static void
on_file_deleted (GObject *object,
GAsyncResult *result,
@@ -1752,6 +1859,7 @@ main (int argc, char *argv[])
g_test_add_data_func ("/file/async-create-delete/4096", GINT_TO_POINTER (4096), test_create_delete);
g_test_add_func ("/file/replace-load", test_replace_load);
g_test_add_func ("/file/replace-cancel", test_replace_cancel);
+ g_test_add_func ("/file/replace-symlink", test_replace_symlink);
g_test_add_func ("/file/async-delete", test_async_delete);
#ifdef G_OS_UNIX
g_test_add_func ("/file/copy-preserve-mode", test_copy_preserve_mode);

View File

@@ -0,0 +1,55 @@
From 6c6439261bc7a8a0627519848a7222b3e1bd4ffe Mon Sep 17 00:00:00 2001
From: Philip Withnall <pwithnall@endlessos.org>
Date: Wed, 24 Feb 2021 17:42:24 +0000
Subject: [PATCH 5/5] glocalfileoutputstream: Add a missing O_CLOEXEC flag to
replace()
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
Upstream-Status: Backport [https://mirrors.ocf.berkeley.edu/ubuntu/pool/main/g/glib2.0/glib2.0_2.64.6-1~ubuntu20.04.3.debian.tar.xz]
CVE: CVE-2021-28153
Signed-off-by: Neetika Singh <Neetika.Singh@kpit.com>
Signed-off-by: Ranjitsinh Rathod <ranjitsinh.rathod@kpit.com>
---
gio/glocalfileoutputstream.c | 15 ++++++++++++---
1 file changed, 12 insertions(+), 3 deletions(-)
--- a/gio/glocalfileoutputstream.c
+++ b/gio/glocalfileoutputstream.c
@@ -58,6 +58,12 @@
#define O_BINARY 0
#endif
+#ifndef O_CLOEXEC
+#define O_CLOEXEC 0
+#else
+#define HAVE_O_CLOEXEC 1
+#endif
+
struct _GLocalFileOutputStreamPrivate {
char *tmp_filename;
char *original_filename;
@@ -1223,7 +1229,7 @@ _g_local_file_output_stream_replace (con
sync_on_close = FALSE;
/* If the file doesn't exist, create it */
- open_flags = O_CREAT | O_EXCL | O_BINARY;
+ open_flags = O_CREAT | O_EXCL | O_BINARY | O_CLOEXEC;
if (readable)
open_flags |= O_RDWR;
else
@@ -1253,8 +1259,11 @@ _g_local_file_output_stream_replace (con
set_error_from_open_errno (filename, error);
return NULL;
}
-
-
+#if !defined(HAVE_O_CLOEXEC) && defined(F_SETFD)
+ else
+ fcntl (fd, F_SETFD, FD_CLOEXEC);
+#endif
+
stream = g_object_new (G_TYPE_LOCAL_FILE_OUTPUT_STREAM, NULL);
stream->priv->fd = fd;
stream->priv->sync_on_close = sync_on_close;

View File

@@ -18,6 +18,30 @@ SRC_URI = "${GNOME_MIRROR}/glib/${SHRT_VER}/glib-${PV}.tar.xz \
file://0001-gio-tests-resources.c-comment-out-a-build-host-only-.patch \
file://tzdata-update.patch \
file://CVE-2020-35457.patch \
file://CVE-2021-27218.patch \
file://CVE-2021-27219-01.patch \
file://CVE-2021-27219-02.patch \
file://CVE-2021-27219-03.patch \
file://CVE-2021-27219-04.patch \
file://CVE-2021-27219-05.patch \
file://CVE-2021-27219-06.patch \
file://CVE-2021-27219-07.patch \
file://CVE-2021-27219-08.patch \
file://CVE-2021-27219-09.patch \
file://CVE-2021-27219-10.patch \
file://CVE-2021-27219-11.patch \
file://CVE-2021-27219-reg1-1.patch \
file://CVE-2021-27219-reg1-2.patch \
file://CVE-2021-27219-reg1-4.patch \
file://CVE-2021-27219-reg1-5.patch \
file://CVE-2021-27219-reg2-1.patch \
file://CVE-2021-27219-reg2-2.patch \
file://CVE-2021-27219-reg2-3.patch \
file://CVE-2021-28153-1.patch \
file://CVE-2021-28153-2.patch \
file://CVE-2021-28153-3.patch \
file://CVE-2021-28153-4.patch \
file://CVE-2021-28153-5.patch \
"
SRC_URI_append_class-native = " file://relocate-modules.patch"

View File

@@ -3,6 +3,6 @@ PV = "2.31+git${SRCPV}"
SRCREV_glibc ?= "4f0a61f75385c9a5879cbe7202042e88f692a3c8"
SRCREV_localedef ?= "cd9f958c4c94a638fa7b2b4e21627364f1a1a655"
GLIBC_GIT_URI ?= "git://sourceware.org/git/glibc.git;branch=master"
GLIBC_GIT_URI ?= "git://sourceware.org/git/glibc.git"
UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>\d+\.\d+(\.(?!90)\d+)*)"

View File

@@ -0,0 +1,66 @@
From c0669ae1a629e16b536bf11cdd0865e0dbcf4bee Mon Sep 17 00:00:00 2001
From: Szabolcs Nagy <szabolcs.nagy@arm.com>
Date: Wed, 30 Dec 2020 21:52:38 +0000
Subject: [PATCH] elf: Refactor _dl_update_slotinfo to avoid use after free
map is not valid to access here because it can be freed by a concurrent
dlclose: during tls access (via __tls_get_addr) _dl_update_slotinfo is
called without holding dlopen locks. So don't check the modid of map.
The map == 0 and map != 0 code paths can be shared (avoiding the dtv
resize in case of map == 0 is just an optimization: larger dtv than
necessary would be fine too).
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
---
elf/dl-tls.c | 21 +++++----------------
1 file changed, 5 insertions(+), 16 deletions(-)
---
Upstream-Status: Backport [https://sourceware.org/git/?p=glibc.git;a=patch;h=c0669ae1a629e16b536bf11cdd0865e0dbcf4bee]
Signed-off-by: Akash Hadke <akash.hadke@kpit.com>
Signed-off-by: Akash Hadke <hadkeakash4@gmail.com>
---
diff --git a/elf/dl-tls.c b/elf/dl-tls.c
index 24d00c14ef..f8b32b3ecb 100644
--- a/elf/dl-tls.c
+++ b/elf/dl-tls.c
@@ -743,6 +743,8 @@ _dl_update_slotinfo (unsigned long int req_modid)
{
for (size_t cnt = total == 0 ? 1 : 0; cnt < listp->len; ++cnt)
{
+ size_t modid = total + cnt;
+
size_t gen = listp->slotinfo[cnt].gen;
if (gen > new_gen)
@@ -758,25 +760,12 @@ _dl_update_slotinfo (unsigned long int req_modid)
/* If there is no map this means the entry is empty. */
struct link_map *map = listp->slotinfo[cnt].map;
- if (map == NULL)
- {
- if (dtv[-1].counter >= total + cnt)
- {
- /* If this modid was used at some point the memory
- might still be allocated. */
- free (dtv[total + cnt].pointer.to_free);
- dtv[total + cnt].pointer.val = TLS_DTV_UNALLOCATED;
- dtv[total + cnt].pointer.to_free = NULL;
- }
-
- continue;
- }
-
/* Check whether the current dtv array is large enough. */
- size_t modid = map->l_tls_modid;
- assert (total + cnt == modid);
if (dtv[-1].counter < modid)
{
+ if (map == NULL)
+ continue;
+
/* Resize the dtv. */
dtv = _dl_resize_dtv (dtv);
--
2.27.0

View File

@@ -0,0 +1,191 @@
From 1387ad6225c2222f027790e3f460e31aa5dd2c54 Mon Sep 17 00:00:00 2001
From: Szabolcs Nagy <szabolcs.nagy@arm.com>
Date: Wed, 30 Dec 2020 19:19:37 +0000
Subject: [PATCH] elf: Fix data races in pthread_create and TLS access [BZ
#19329]
DTV setup at thread creation (_dl_allocate_tls_init) is changed
to take the dlopen lock, GL(dl_load_lock). Avoiding data races
here without locks would require design changes: the map that is
accessed for static TLS initialization here may be concurrently
freed by dlclose. That use after free may be solved by only
locking around static TLS setup or by ensuring dlclose does not
free modules with static TLS, however currently every link map
with TLS has to be accessed at least to see if it needs static
TLS. And even if that's solved, still a lot of atomics would be
needed to synchronize DTV related globals without a lock. So fix
both bug 19329 and bug 27111 with a lock that prevents DTV setup
running concurrently with dlopen or dlclose.
_dl_update_slotinfo at TLS access still does not use any locks
so CONCURRENCY NOTES are added to explain the synchronization.
The early exit from the slotinfo walk when max_modid is reached
is not strictly necessary, but does not hurt either.
An incorrect acquire load was removed from _dl_resize_dtv: it
did not synchronize with any release store or fence and
synchronization is now handled separately at thread creation
and TLS access time.
There are still a number of racy read accesses to globals that
will be changed to relaxed MO atomics in a followup patch. This
should not introduce regressions compared to existing behaviour
and avoid cluttering the main part of the fix.
Not all TLS access related data races got fixed here: there are
additional races at lazy tlsdesc relocations see bug 27137.
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
---
elf/dl-tls.c | 63 +++++++++++++++++++++++++++++++++++++++-------------
1 file changed, 47 insertions(+), 16 deletions(-)
---
Upstream-Status: Backport [https://sourceware.org/git/?p=glibc.git;a=patch;h=1387ad6225c2222f027790e3f460e31aa5dd2c54]
Signed-off-by: Akash Hadke <akash.hadke@kpit.com>
Signed-off-by: Akash Hadke <hadkeakash4@gmail.com>
---
diff --git a/elf/dl-tls.c b/elf/dl-tls.c
index 6baff0c1ea..94f3cdbae0 100644
--- a/elf/dl-tls.c
+++ b/elf/dl-tls.c
@@ -475,14 +475,11 @@ extern dtv_t _dl_static_dtv[];
#endif
static dtv_t *
-_dl_resize_dtv (dtv_t *dtv)
+_dl_resize_dtv (dtv_t *dtv, size_t max_modid)
{
/* Resize the dtv. */
dtv_t *newp;
- /* Load GL(dl_tls_max_dtv_idx) atomically since it may be written to by
- other threads concurrently. */
- size_t newsize
- = atomic_load_acquire (&GL(dl_tls_max_dtv_idx)) + DTV_SURPLUS;
+ size_t newsize = max_modid + DTV_SURPLUS;
size_t oldsize = dtv[-1].counter;
if (dtv == GL(dl_initial_dtv))
@@ -528,11 +525,14 @@ _dl_allocate_tls_init (void *result)
size_t total = 0;
size_t maxgen = 0;
+ /* Protects global dynamic TLS related state. */
+ __rtld_lock_lock_recursive (GL(dl_load_lock));
+
/* Check if the current dtv is big enough. */
if (dtv[-1].counter < GL(dl_tls_max_dtv_idx))
{
/* Resize the dtv. */
- dtv = _dl_resize_dtv (dtv);
+ dtv = _dl_resize_dtv (dtv, GL(dl_tls_max_dtv_idx));
/* Install this new dtv in the thread data structures. */
INSTALL_DTV (result, &dtv[-1]);
@@ -600,6 +600,7 @@ _dl_allocate_tls_init (void *result)
listp = listp->next;
assert (listp != NULL);
}
+ __rtld_lock_unlock_recursive (GL(dl_load_lock));
/* The DTV version is up-to-date now. */
dtv[0].counter = maxgen;
@@ -734,12 +735,29 @@ _dl_update_slotinfo (unsigned long int req_modid)
if (dtv[0].counter < listp->slotinfo[idx].gen)
{
- /* The generation counter for the slot is higher than what the
- current dtv implements. We have to update the whole dtv but
- only those entries with a generation counter <= the one for
- the entry we need. */
+ /* CONCURRENCY NOTES:
+
+ Here the dtv needs to be updated to new_gen generation count.
+
+ This code may be called during TLS access when GL(dl_load_lock)
+ is not held. In that case the user code has to synchronize with
+ dlopen and dlclose calls of relevant modules. A module m is
+ relevant if the generation of m <= new_gen and dlclose of m is
+ synchronized: a memory access here happens after the dlopen and
+ before the dlclose of relevant modules. The dtv entries for
+ relevant modules need to be updated, other entries can be
+ arbitrary.
+
+ This e.g. means that the first part of the slotinfo list can be
+ accessed race free, but the tail may be concurrently extended.
+ Similarly relevant slotinfo entries can be read race free, but
+ other entries are racy. However updating a non-relevant dtv
+ entry does not affect correctness. For a relevant module m,
+ max_modid >= modid of m. */
size_t new_gen = listp->slotinfo[idx].gen;
size_t total = 0;
+ size_t max_modid = atomic_load_relaxed (&GL(dl_tls_max_dtv_idx));
+ assert (max_modid >= req_modid);
/* We have to look through the entire dtv slotinfo list. */
listp = GL(dl_tls_dtv_slotinfo_list);
@@ -749,12 +767,14 @@ _dl_update_slotinfo (unsigned long int req_modid)
{
size_t modid = total + cnt;
+ /* Later entries are not relevant. */
+ if (modid > max_modid)
+ break;
+
size_t gen = listp->slotinfo[cnt].gen;
if (gen > new_gen)
- /* This is a slot for a generation younger than the
- one we are handling now. It might be incompletely
- set up so ignore it. */
+ /* Not relevant. */
continue;
/* If the entry is older than the current dtv layout we
@@ -771,7 +791,7 @@ _dl_update_slotinfo (unsigned long int req_modid)
continue;
/* Resize the dtv. */
- dtv = _dl_resize_dtv (dtv);
+ dtv = _dl_resize_dtv (dtv, max_modid);
assert (modid <= dtv[-1].counter);
@@ -793,8 +813,17 @@ _dl_update_slotinfo (unsigned long int req_modid)
}
total += listp->len;
+ if (total > max_modid)
+ break;
+
+ /* Synchronize with _dl_add_to_slotinfo. Ideally this would
+ be consume MO since we only need to order the accesses to
+ the next node after the read of the address and on most
+ hardware (other than alpha) a normal load would do that
+ because of the address dependency. */
+ listp = atomic_load_acquire (&listp->next);
}
- while ((listp = listp->next) != NULL);
+ while (listp != NULL);
/* This will be the new maximum generation counter. */
dtv[0].counter = new_gen;
@@ -986,7 +1015,7 @@ _dl_add_to_slotinfo (struct link_map *l, bool do_add)
the first slot. */
assert (idx == 0);
- listp = prevp->next = (struct dtv_slotinfo_list *)
+ listp = (struct dtv_slotinfo_list *)
malloc (sizeof (struct dtv_slotinfo_list)
+ TLS_SLOTINFO_SURPLUS * sizeof (struct dtv_slotinfo));
if (listp == NULL)
@@ -1000,6 +1029,8 @@ cannot create TLS data structures"));
listp->next = NULL;
memset (listp->slotinfo, '\0',
TLS_SLOTINFO_SURPLUS * sizeof (struct dtv_slotinfo));
+ /* Synchronize with _dl_update_slotinfo. */
+ atomic_store_release (&prevp->next, listp);
}
/* Add the information into the slotinfo data structure. */
--
2.27.0

View File

@@ -0,0 +1,206 @@
From f4f8f4d4e0f92488431b268c8cd9555730b9afe9 Mon Sep 17 00:00:00 2001
From: Szabolcs Nagy <szabolcs.nagy@arm.com>
Date: Wed, 30 Dec 2020 19:19:37 +0000
Subject: [PATCH] elf: Use relaxed atomics for racy accesses [BZ #19329]
This is a follow up patch to the fix for bug 19329. This adds relaxed
MO atomics to accesses that were previously data races but are now
race conditions, and where relaxed MO is sufficient.
The race conditions all follow the pattern that the write is behind the
dlopen lock, but a read can happen concurrently (e.g. during tls access)
without holding the lock. For slotinfo entries the read value only
matters if it reads from a synchronized write in dlopen or dlclose,
otherwise the related dtv entry is not valid to access so it is fine
to leave it in an inconsistent state. The same applies for
GL(dl_tls_max_dtv_idx) and GL(dl_tls_generation), but there the
algorithm relies on the fact that the read of the last synchronized
write is an increasing value.
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
---
elf/dl-close.c | 20 +++++++++++++-------
elf/dl-open.c | 5 ++++-
elf/dl-tls.c | 31 +++++++++++++++++++++++--------
sysdeps/x86_64/dl-tls.c | 3 ++-
4 files changed, 42 insertions(+), 17 deletions(-)
---
Upstream-Status: Backport [https://sourceware.org/git/?p=glibc.git;a=patch;h=f4f8f4d4e0f92488431b268c8cd9555730b9afe9]
Comment: Hunks from elf/dl-open.c and elf/dl-tls.c are refreshed due to offset change.
Signed-off-by: Akash Hadke <akash.hadke@kpit.com>
Signed-off-by: Akash Hadke <hadkeakash4@gmail.com>
---
diff --git a/elf/dl-close.c b/elf/dl-close.c
index c51becd06b..3720e47dd1 100644
--- a/elf/dl-close.c
+++ b/elf/dl-close.c
@@ -79,9 +79,10 @@ remove_slotinfo (size_t idx, struct dtv_slotinfo_list *listp, size_t disp,
{
assert (old_map->l_tls_modid == idx);
- /* Mark the entry as unused. */
- listp->slotinfo[idx - disp].gen = GL(dl_tls_generation) + 1;
- listp->slotinfo[idx - disp].map = NULL;
+ /* Mark the entry as unused. These can be read concurrently. */
+ atomic_store_relaxed (&listp->slotinfo[idx - disp].gen,
+ GL(dl_tls_generation) + 1);
+ atomic_store_relaxed (&listp->slotinfo[idx - disp].map, NULL);
}
/* If this is not the last currently used entry no need to look
@@ -96,8 +97,8 @@ remove_slotinfo (size_t idx, struct dtv_slotinfo_list *listp, size_t disp,
if (listp->slotinfo[idx - disp].map != NULL)
{
- /* Found a new last used index. */
- GL(dl_tls_max_dtv_idx) = idx;
+ /* Found a new last used index. This can be read concurrently. */
+ atomic_store_relaxed (&GL(dl_tls_max_dtv_idx), idx);
return true;
}
}
@@ -571,7 +572,9 @@ _dl_close_worker (struct link_map *map, bool force)
GL(dl_tls_dtv_slotinfo_list), 0,
imap->l_init_called))
/* All dynamically loaded modules with TLS are unloaded. */
- GL(dl_tls_max_dtv_idx) = GL(dl_tls_static_nelem);
+ /* Can be read concurrently. */
+ atomic_store_relaxed (&GL(dl_tls_max_dtv_idx),
+ GL(dl_tls_static_nelem));
if (imap->l_tls_offset != NO_TLS_OFFSET
&& imap->l_tls_offset != FORCED_DYNAMIC_TLS_OFFSET)
@@ -769,8 +772,11 @@ _dl_close_worker (struct link_map *map, bool force)
/* If we removed any object which uses TLS bump the generation counter. */
if (any_tls)
{
- if (__glibc_unlikely (++GL(dl_tls_generation) == 0))
+ size_t newgen = GL(dl_tls_generation) + 1;
+ if (__glibc_unlikely (newgen == 0))
_dl_fatal_printf ("TLS generation counter wrapped! Please report as described in "REPORT_BUGS_TO".\n");
+ /* Can be read concurrently. */
+ atomic_store_relaxed (&GL(dl_tls_generation), newgen);
if (tls_free_end == GL(dl_tls_static_used))
GL(dl_tls_static_used) = tls_free_start;
diff --git a/elf/dl-open.c b/elf/dl-open.c
index 09f0df7d38..bb79ef00f1 100644
--- a/elf/dl-open.c
+++ b/elf/dl-open.c
@@ -387,9 +387,12 @@
}
}
- if (__builtin_expect (++GL(dl_tls_generation) == 0, 0))
+ size_t newgen = GL(dl_tls_generation) + 1;
+ if (__glibc_unlikely (newgen == 0))
_dl_fatal_printf (N_("\
TLS generation counter wrapped! Please report this."));
+ /* Can be read concurrently. */
+ atomic_store_relaxed (&GL(dl_tls_generation), newgen);
/* We need a second pass for static tls data, because
_dl_update_slotinfo must not be run while calls to
diff --git a/elf/dl-tls.c b/elf/dl-tls.c
index 94f3cdbae0..dc69cd984e 100644
--- a/elf/dl-tls.c
+++ b/elf/dl-tls.c
@@ -96,7 +96,9 @@
/* No gaps, allocate a new entry. */
nogaps:
- result = ++GL(dl_tls_max_dtv_idx);
+ result = GL(dl_tls_max_dtv_idx) + 1;
+ /* Can be read concurrently. */
+ atomic_store_relaxed (&GL(dl_tls_max_dtv_idx), result);
}
return result;
@@ -279,10 +281,12 @@
dtv_t *dtv;
size_t dtv_length;
+ /* Relaxed MO, because the dtv size is later rechecked, not relied on. */
+ size_t max_modid = atomic_load_relaxed (&GL(dl_tls_max_dtv_idx));
/* We allocate a few more elements in the dtv than are needed for the
initial set of modules. This should avoid in most cases expansions
of the dtv. */
- dtv_length = GL(dl_tls_max_dtv_idx) + DTV_SURPLUS;
+ dtv_length = max_modid + DTV_SURPLUS;
dtv = calloc (dtv_length + 2, sizeof (dtv_t));
if (dtv != NULL)
{
@@ -687,7 +691,7 @@
if (modid > max_modid)
break;
- size_t gen = listp->slotinfo[cnt].gen;
+ size_t gen = atomic_load_relaxed (&listp->slotinfo[cnt].gen);
if (gen > new_gen)
/* Not relevant. */
@@ -699,7 +703,8 @@
continue;
/* If there is no map this means the entry is empty. */
- struct link_map *map = listp->slotinfo[cnt].map;
+ struct link_map *map
+ = atomic_load_relaxed (&listp->slotinfo[cnt].map);
/* Check whether the current dtv array is large enough. */
if (dtv[-1].counter < modid)
{
@@ -843,7 +848,12 @@
{
dtv_t *dtv = THREAD_DTV ();
- if (__glibc_unlikely (dtv[0].counter != GL(dl_tls_generation)))
+ /* Update is needed if dtv[0].counter < the generation of the accessed
+ module. The global generation counter is used here as it is easier
+ to check. Synchronization for the relaxed MO access is guaranteed
+ by user code, see CONCURRENCY NOTES in _dl_update_slotinfo. */
+ size_t gen = atomic_load_relaxed (&GL(dl_tls_generation));
+ if (__glibc_unlikely (dtv[0].counter != gen))
return update_get_addr (GET_ADDR_PARAM);
void *p = dtv[GET_ADDR_MODULE].pointer.val;
@@ -866,7 +876,10 @@
return NULL;
dtv_t *dtv = THREAD_DTV ();
- if (__glibc_unlikely (dtv[0].counter != GL(dl_tls_generation)))
+ /* This may be called without holding the GL(dl_load_lock). Reading
+ arbitrary gen value is fine since this is best effort code. */
+ size_t gen = atomic_load_relaxed (&GL(dl_tls_generation));
+ if (__glibc_unlikely (dtv[0].counter != gen))
{
/* This thread's DTV is not completely current,
but it might already cover this module. */
@@ -961,7 +974,9 @@
/* Add the information into the slotinfo data structure. */
if (do_add)
{
- listp->slotinfo[idx].map = l;
- listp->slotinfo[idx].gen = GL(dl_tls_generation) + 1;
+ /* Can be read concurrently. See _dl_update_slotinfo. */
+ atomic_store_relaxed (&listp->slotinfo[idx].map, l);
+ atomic_store_relaxed (&listp->slotinfo[idx].gen,
+ GL(dl_tls_generation) + 1);
}
}
diff --git a/sysdeps/x86_64/dl-tls.c b/sysdeps/x86_64/dl-tls.c
index 6595f6615b..24ef560b71 100644
--- a/sysdeps/x86_64/dl-tls.c
+++ b/sysdeps/x86_64/dl-tls.c
@@ -40,7 +40,8 @@ __tls_get_addr_slow (GET_ADDR_ARGS)
{
dtv_t *dtv = THREAD_DTV ();
- if (__glibc_unlikely (dtv[0].counter != GL(dl_tls_generation)))
+ size_t gen = atomic_load_relaxed (&GL(dl_tls_generation));
+ if (__glibc_unlikely (dtv[0].counter != gen))
return update_get_addr (GET_ADDR_PARAM);
return tls_get_addr_tail (GET_ADDR_PARAM, dtv, NULL);
--
2.27.0

View File

@@ -0,0 +1,144 @@
From 9d0e30329c23b5ad736fda3f174208c25970dbce Mon Sep 17 00:00:00 2001
From: Szabolcs Nagy <szabolcs.nagy@arm.com>
Date: Tue, 13 Dec 2016 12:28:41 +0000
Subject: [PATCH] elf: Add test case for [BZ #19329]
Test concurrent dlopen and pthread_create when the loaded modules have
TLS. This triggers dl-tls assertion failures more reliably than the
nptl/tst-stack4 test.
The dlopened module has 100 DT_NEEDED dependencies with TLS, they were
reused from an existing TLS test. The number of created threads during
dlopen depends on filesystem speed and hardware, but at most 3 threads
are alive at a time to limit resource usage.
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
---
elf/Makefile | 9 ++++--
elf/tst-tls21.c | 68 ++++++++++++++++++++++++++++++++++++++++++++++
elf/tst-tls21mod.c | 1 +
3 files changed, 76 insertions(+), 2 deletions(-)
create mode 100644 elf/tst-tls21.c
create mode 100644 elf/tst-tls21mod.c
---
Upstream-Status: Backport [https://sourceware.org/git/?p=glibc.git;a=patch;h=9d0e30329c23b5ad736fda3f174208c25970dbce]
Comment: Hunks from elf/Makefile are refreshed as per glibc 2.31 codebase.
Signed-off-by: Akash Hadke <akash.hadke@kpit.com>
Signed-off-by: Akash Hadke <hadkeakash4@gmail.com>
---
diff --git a/elf/Makefile b/elf/Makefile
index d3e909637a..3241cb6046 100644
--- a/elf/Makefile
+++ b/elf/Makefile
@@ -201,7 +201,7 @@
tst-unwind-ctor tst-unwind-main tst-audit13 \
tst-sonamemove-link tst-sonamemove-dlopen tst-dlopen-tlsmodid \
tst-dlopen-self tst-auditmany tst-initfinilazyfail tst-dlopenfail \
- tst-dlopenfail-2
+ tst-dlopenfail-2 tst-tls21
# reldep9
tests-internal += loadtest unload unload2 circleload1 \
neededtest neededtest2 neededtest3 neededtest4 \
@@ -312,7 +312,7 @@
tst-auditmanymod7 tst-auditmanymod8 tst-auditmanymod9 \
tst-initlazyfailmod tst-finilazyfailmod \
tst-dlopenfailmod1 tst-dlopenfaillinkmod tst-dlopenfailmod2 \
- tst-dlopenfailmod3 tst-ldconfig-ld-mod
+ tst-dlopenfailmod3 tst-ldconfig-ld-mod tst-tls21mod
# Most modules build with _ISOMAC defined, but those filtered out
# depend on internal headers.
modules-names-tests = $(filter-out ifuncmod% tst-libc_dlvsym-dso tst-tlsmod%,\
@@ -1697,5 +1697,10 @@
$(objpfx)tst-dlopen-nodelete-reloc-mod16.so
LDFLAGS-tst-dlopen-nodelete-reloc-mod17.so = -Wl,--no-as-needed
+# Reuses tst-tls-many-dynamic-modules
+$(objpfx)tst-tls21: $(libdl) $(shared-thread-library)
+$(objpfx)tst-tls21.out: $(objpfx)tst-tls21mod.so
+$(objpfx)tst-tls21mod.so: $(tst-tls-many-dynamic-modules:%=$(objpfx)%.so)
+
$(objpfx)tst-ldconfig-ld_so_conf-update.out: $(objpfx)tst-ldconfig-ld-mod.so
$(objpfx)tst-ldconfig-ld_so_conf-update: $(libdl)
diff --git a/elf/tst-tls21.c b/elf/tst-tls21.c
new file mode 100644
index 0000000000..560bf5813a
--- /dev/null
+++ b/elf/tst-tls21.c
@@ -0,0 +1,68 @@
+/* Test concurrent dlopen and pthread_create: BZ 19329.
+ Copyright (C) 2021 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <dlfcn.h>
+#include <pthread.h>
+#include <stdio.h>
+#include <stdatomic.h>
+#include <support/xdlfcn.h>
+#include <support/xthread.h>
+
+#define THREADS 10000
+
+static atomic_int done;
+
+static void *
+start (void *a)
+{
+ /* Load a module with many dependencies that each have TLS. */
+ xdlopen ("tst-tls21mod.so", RTLD_LAZY);
+ atomic_store_explicit (&done, 1, memory_order_release);
+ return 0;
+}
+
+static void *
+nop (void *a)
+{
+ return 0;
+}
+
+static int
+do_test (void)
+{
+ pthread_t t1, t2;
+ int i;
+
+ /* Load a module with lots of dependencies and TLS. */
+ t1 = xpthread_create (0, start, 0);
+
+ /* Concurrently create lots of threads until dlopen is observably done. */
+ for (i = 0; i < THREADS; i++)
+ {
+ if (atomic_load_explicit (&done, memory_order_acquire) != 0)
+ break;
+ t2 = xpthread_create (0, nop, 0);
+ xpthread_join (t2);
+ }
+
+ xpthread_join (t1);
+ printf ("threads created during dlopen: %d\n", i);
+ return 0;
+}
+
+#include <support/test-driver.c>
diff --git a/elf/tst-tls21mod.c b/elf/tst-tls21mod.c
new file mode 100644
index 0000000000..206ece4fb3
--- /dev/null
+++ b/elf/tst-tls21mod.c
@@ -0,0 +1 @@
+int __thread x;
--
2.27.0

Some files were not shown because too many files have changed in this diff Show More