Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
72 commits
Select commit Hold shift + click to select a range
592a2a1
RDMA/rxe: Fix responder UAF on IB_QP_MAX_DEST_RD_ATOMIC modify_qp
Jul 12, 2026
40461ac
RDMA/rxe: Fix OOB in free_rd_atomic_resources()
BaldDemian Jul 30, 2026
b10e26e
nvme-tcp: fix usage of page_frag_cache
logost Jul 16, 2026
0762a37
selftests/bpf: Fix test_maps sockmap failure
mrpre Aug 28, 2026
beb8798
fpga: dfl: fme: add error handling
griffinkh Jul 6, 2026
ba12ecb
accessibility: speakup: unregister tty ldisc on later init failures
May 31, 2026
71172fc
usb: xhci: Handle bogus TRB pointers in Missed Service Error events
Aug 6, 2026
6f10835
usb: xhci: Handle USB3 port events when there is one roothub
strrs Aug 6, 2026
8c34f96
usb: xhci: bail out of setup if the controller is inaccessible
leitao Aug 6, 2026
d2ae20c
xhci: dbgtty: Fix unregister on tty_register_driver() failure
lucasdemarchi Aug 6, 2026
fc7e363
xhci: dbgtty: Fix unregister on tty_alloc_driver() failure
lucasdemarchi Aug 6, 2026
3d2e771
fuse: fix race between interrupt and resend
Jul 9, 2026
1f241c4
fuse: fix missing barrier when checking io-uring readiness
joannekoong Jul 16, 2026
5079e75
fuse: publish io-uring queues with release semantics
joannekoong Jul 16, 2026
50a062d
fuse: wait for FR_FINISHED on abort_on_kill to prevent use-after-free
Rochan-A Aug 13, 2026
177fef1
fuse: fix invalidate lock leak on setattr writeback failure
LiBaokun96 Aug 17, 2026
79d0690
fuse: fix invalidate lock leak on open O_TRUNC DAX failure
LiBaokun96 Aug 17, 2026
0a544c8
usb: usbtest: disable dynamic ID support
a-nogikh Aug 6, 2026
5eaba76
usb: gadget: f_tcm: keep port count until LUN teardown completes
shuangpeng-kernel Aug 7, 2026
1cecf26
KVM: SEV: Allocate full pages for {DE,EN}CRYPT ops on SNP-enabled hosts
sean-jc Jul 23, 2026
67b6b28
KVM: SEV: Drop FOLL_WRITE for encrypted region registration
pagupta Jul 15, 2026
5f76d69
KVM: SEV: Track the GPA of the guest-controlled VMSA used for SNP guests
sean-jc Jul 9, 2026
3583690
KVM: SEV: Extract loading of guest-provided VMSA to a separate helper
sean-jc Jul 9, 2026
4208925
KVM: SEV: Mark vCPU RUNNABLE after AP_CREATE, even if VMSA is unusable
sean-jc Jul 9, 2026
f61b9eb
KVM: SEV: Wire up kvm_x86_ops.gmem_xxx() if and only if CONFIG_KVM_AM…
sean-jc Jul 9, 2026
35ef2bf
tls: device: fix out-of-bounds write in tls_append_frag()
mrpre Aug 23, 2026
eeb2b4f
gtp: serialize PDP context updates
Aug 18, 2026
1af7c7b
net/tcp: fix TCP-AO key deletion in VRFs
rastislavs Aug 22, 2026
cdb5ee0
tcp: fix AO info use-after-free in tcp_ao_connect_init()
Aug 25, 2026
70eddfe
net/tcp-ao: fix use-after-free of current_key on reconnect to another…
V4bel Aug 16, 2026
164bc4a
net: advertise TCP MSS from the configured MTU, not the learned PMTU
mrpre Aug 15, 2026
74153ba
xfrm: espintcp: fix UAF during close
qsn Jul 16, 2026
b486c44
tcp: clamp route advmss to TCP_MIN_MSS
edragain2nd Aug 19, 2026
758ab26
xfrm: drop ESP-in-TCP packets with no ingress device
rr00xxyy Jul 18, 2026
4b8b2c7
xfrm: avoid lock inversion in nat keepalive work
Jul 21, 2026
6011e13
xfrm: ah6: validate routing header segments_left
manizada Jul 23, 2026
727845e
xfrm: fix xfrm_state_construct() auth-trunc leak
Jul 27, 2026
2f61e88
xfrm: bound nat keepalive state collection
Aug 17, 2026
7ab10a5
net: bridge: mcast: fix use-after-free of a master VLAN's multicast c…
nszetei Aug 26, 2026
0608d09
vlan: fix skb_under_panic and races when toggling HW VLAN offload
edumazet Aug 11, 2026
ef9627b
net/packet: defer vmalloc TX_RING free until skbs finish
kylebot-oai Aug 16, 2026
f93f326
ipv6: seg6: clear IPv4 control block on IPIP decapsulation
kylebot-oai Aug 17, 2026
b1bddf4
batman-adv: reject unrepresentable multicast TVLV offsets
kylebot-oai Aug 17, 2026
0bb04d8
vxlan: keep the last remote linked during FDB flush
kylebot-oai Aug 10, 2026
8f63afe
netfilter: nft_set_pipapo_avx2: add missing vzeroupper
Aug 15, 2026
b4147a0
netfilter: nf_tables: don't queue packet path object notifications
corvusaisec Aug 10, 2026
259cd36
mm/swap: reject swapon() on filesystem-level encrypted files
Aug 3, 2026
c86c794
kunit: irq: Continue increasing hrtimer interval for longer
Aug 3, 2026
59fe142
crypto: virtio - bound the akcipher result length
bryamzxz Jun 22, 2026
4f01a07
crypto: qcom-rng - Enable clock in hwrng case
Jun 8, 2026
63a2825
crypto: qcom-rng - Remove crypto_rng interface
Jun 8, 2026
2f729cc
crypto: qcom-rng - Allow zero as a random number
Jun 8, 2026
b71a17a
crypto: sun8i-ce - Remove crypto_rng interface
Jun 15, 2026
c212a15
crypto: sun8i-ss - Remove crypto_rng interface
Jun 15, 2026
dd11eb0
crypto: atmel-tdes - use scatterlist length before DMA mapping
toblux Jun 11, 2026
106f648
crypto: krb5 - use kfree_sensitive() for derived key buffers
Aug 3, 2026
d657c19
crypto: qce - fix CCM AAD buffer underallocation
mdalam-qcom Aug 7, 2026
df436e0
crypto: iaa - fall back to software for multi-entry scatterlists
gcabiddu Aug 5, 2026
b8986bd
crypto: mxs-dcp - fix source scatterlist length access
toblux Jun 21, 2026
18074b7
crypto: qce - Remove unsafe/deprecated algorithms
brgl Jun 22, 2026
b7468ed
KVM: s390: vsie: zero stale crypto bits
borntraeger Aug 11, 2026
5c24376
usb: core: Add lock to usb_wakeup_notification()
griffinkh Jul 13, 2026
6e5da47
usb: core: Strengthen error handling in hub_hub_status()
griffinkh Jul 22, 2026
43fc0c7
ALSA: usb-audio: Fix sample rates for PreSonus AudioBox USB
v-t-r-gg Aug 12, 2026
71c515c
ALSA: usb-audio: fix OOB write in snd_usbmidi_novation_output()
Espilon-Org Aug 23, 2026
5a34c7e
ALSA: usb-audio: Complete cleanup after system-resume errors
willyp713 Aug 24, 2026
0509bf0
USB: serial: option: fix slab OOB read in interrupt URB callback
Jul 25, 2026
d8a3284
USB: serial: spcp8x5: drop broken carrier detect support
jhovold Aug 6, 2026
77427be
USB: c67x00: fix use-after-free in c67x00_add_iso_urb()
shuangpeng-kernel Aug 6, 2026
f0194c8
wifi: mt76: mt7925: ensure tx headroom in usb_sdio_tx_prepare_skb
Lucid-Duck Jul 15, 2026
1d4a684
usb: usbfs: fix use-after-free of usb_device in usbdev_release()
mzereza Aug 10, 2026
8551a3c
Linux 7.2.3
gregkh Sep 2, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions Documentation/filesystems/fscrypt.rst
Original file line number Diff line number Diff line change
Expand Up @@ -1238,6 +1238,10 @@ astute users may notice some differences in behavior:

- DAX (Direct Access) is not supported on encrypted files.

- Encrypted files cannot be used directly as swap files. To swap to
an encrypted file, set up a loopback device on top of it.
Alternatively, encrypted swap can use a dm-crypt device.

- The maximum length of an encrypted symlink is 2 bytes shorter than
the maximum length of an unencrypted symlink. For example, on an
EXT4 filesystem with a 4K block size, unencrypted symlinks can be up
Expand Down
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# SPDX-License-Identifier: GPL-2.0
VERSION = 7
PATCHLEVEL = 2
SUBLEVEL = 2
SUBLEVEL = 3
EXTRAVERSION =
NAME = Baby Opossum Posse

Expand Down
1 change: 1 addition & 0 deletions arch/s390/kvm/vsie.c
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,7 @@ static int setup_apcb10(struct kvm_vcpu *vcpu, struct kvm_s390_apcb1 *apcb_s,
sizeof(struct kvm_s390_apcb0)))
return -EFAULT;

memset(apcb_s, 0, sizeof(*apcb_s));
apcb_s->apm[0] = apcb_h->apm[0] & tmp.apm[0];
apcb_s->aqm[0] = apcb_h->aqm[0] & tmp.aqm[0] & 0xffff000000000000UL;
apcb_s->adm[0] = apcb_h->adm[0] & tmp.adm[0] & 0xffff000000000000UL;
Expand Down
99 changes: 71 additions & 28 deletions arch/x86/kvm/svm/sev.c
Original file line number Diff line number Diff line change
Expand Up @@ -1303,9 +1303,28 @@ static void *sev_dbg_crypt_slow_alloc(struct page *page, unsigned long __va,
if (WARN_ON_ONCE((*pa & PAGE_MASK) != ((*pa + *nr_bytes - 1) & PAGE_MASK)))
return NULL;

/*
* If SNP is enabled, i.e. the RMP is active, allocate a full page to
* prevent concurrent accesses to the page. As required by firmware,
* the PSP driver updates the RMP to temporarily transfer ownership of
* the page to Firmware while the {DE,EN}CRYPT operation is in-progress,
* and so concurrent software accesses to the page will encounter
* seemingly spurious RMP #PF violations
*/
if (cc_platform_has(CC_ATTR_HOST_SEV_SNP))
return (void *)__get_free_page(GFP_KERNEL);

return kmalloc(*nr_bytes, GFP_KERNEL);
}

static void sev_dbg_crypt_slow_free(void *buf)
{
if (cc_platform_has(CC_ATTR_HOST_SEV_SNP))
free_page((unsigned long)buf);
else
kfree(buf);
}

static int sev_dbg_decrypt_slow(struct kvm *kvm, unsigned long src,
struct page *src_p, unsigned long dst,
unsigned int len, int *err)
Expand All @@ -1327,7 +1346,7 @@ static int sev_dbg_decrypt_slow(struct kvm *kvm, unsigned long src,
if (copy_to_user((void __user *)dst, buf + (src & 15), len))
r = -EFAULT;
out:
kfree(buf);
sev_dbg_crypt_slow_free(buf);
return r;
}

Expand Down Expand Up @@ -1360,7 +1379,7 @@ static int sev_dbg_encrypt_slow(struct kvm *kvm, unsigned long src,
r = sev_issue_dbg_cmd(kvm, __sme_set(__pa(buf)), dst_pa,
nr_bytes, KVM_SEV_DBG_ENCRYPT, err);
out:
kfree(buf);
sev_dbg_crypt_slow_free(buf);
return r;
}

Expand Down Expand Up @@ -2777,8 +2796,12 @@ int sev_mem_enc_register_region(struct kvm *kvm,
if (!region)
return -ENOMEM;

/*
* Do NOT specify FOLL_WRITE, as KVM isn't using the pinned pages to
* write memory, and FOLL_LONGTERM itself triggers CoW unshare.
*/
region->pages = sev_pin_memory(kvm, range->addr, range->size, &region->npages,
FOLL_WRITE | FOLL_LONGTERM);
FOLL_LONGTERM);
if (IS_ERR(region->pages)) {
ret = PTR_ERR(region->pages);
goto e_free;
Expand Down Expand Up @@ -4072,43 +4095,29 @@ static int snp_begin_psc(struct vcpu_svm *svm)
return snp_do_psc(svm);
}

/*
* Invoked as part of svm_vcpu_reset() processing of an init event.
*/
static void sev_snp_init_protected_guest_state(struct kvm_vcpu *vcpu)
static void sev_snp_reload_vmsa(struct kvm_vcpu *vcpu, gpa_t gpa)
{
struct vcpu_svm *svm = to_svm(vcpu);
struct kvm_memory_slot *slot;
gfn_t gfn = gpa_to_gfn(gpa);
struct page *page;
kvm_pfn_t pfn;
gfn_t gfn;

guard(mutex)(&svm->sev_es.snp_vmsa_mutex);

if (!svm->sev_es.snp_ap_waiting_for_reset)
return;

svm->sev_es.snp_ap_waiting_for_reset = false;

/* Mark the vCPU as offline and not runnable */
vcpu->arch.pv.pv_unhalted = false;
kvm_set_mp_state(vcpu, KVM_MP_STATE_HALTED);
lockdep_assert_held(&svm->sev_es.snp_vmsa_mutex);

/* Clear use of the VMSA */
/* Clear use of the VMSA. */
svm->vmcb->control.vmsa_pa = INVALID_PAGE;
svm->sev_es.snp_guest_vmsa_gpa = INVALID_PAGE;

/*
* When replacing the VMSA during SEV-SNP AP creation,
* mark the VMCB dirty so that full state is always reloaded.
*/
vmcb_mark_all_dirty(svm->vmcb);

if (!VALID_PAGE(svm->sev_es.snp_vmsa_gpa))
if (!VALID_PAGE(gpa))
return;

gfn = gpa_to_gfn(svm->sev_es.snp_vmsa_gpa);
svm->sev_es.snp_vmsa_gpa = INVALID_PAGE;

slot = gfn_to_memslot(vcpu->kvm, gfn);
if (!slot)
return;
Expand All @@ -4132,11 +4141,9 @@ static void sev_snp_init_protected_guest_state(struct kvm_vcpu *vcpu)
svm->sev_es.snp_has_guest_vmsa = true;

/* Use the new VMSA */
svm->sev_es.snp_guest_vmsa_gpa = gpa;
svm->vmcb->control.vmsa_pa = pfn_to_hpa(pfn);

/* Mark the vCPU as runnable */
kvm_set_mp_state(vcpu, KVM_MP_STATE_RUNNABLE);

/*
* gmem pages aren't currently migratable, but if this ever changes
* then care should be taken to ensure svm->sev_es.vmsa is pinned
Expand All @@ -4145,6 +4152,40 @@ static void sev_snp_init_protected_guest_state(struct kvm_vcpu *vcpu)
kvm_release_page_clean(page);
}

/*
* Invoked as part of svm_vcpu_reset() processing of an init event.
*/
static void sev_snp_init_protected_guest_state(struct kvm_vcpu *vcpu)
{
struct vcpu_svm *svm = to_svm(vcpu);
gpa_t gpa;

guard(mutex)(&svm->sev_es.snp_vmsa_mutex);

if (!svm->sev_es.snp_ap_waiting_for_reset)
return;

svm->sev_es.snp_ap_waiting_for_reset = false;

/* Mark the vCPU as offline and not runnable */
vcpu->arch.pv.pv_unhalted = false;
kvm_set_mp_state(vcpu, KVM_MP_STATE_HALTED);

gpa = svm->sev_es.snp_pending_vmsa_gpa;
svm->sev_es.snp_pending_vmsa_gpa = INVALID_PAGE;

sev_snp_reload_vmsa(vcpu, gpa);

/*
* Mark the vCPU as runnable for CREATE requests, indicated by a valid
* VMSA GPA, even if installing the VMSA failed, so that KVM_RUN will
* fail instead of blocking indefinitely and hanging the vCPU, e.g. if
* the backing guest_memfd page is unavailable.
*/
if (VALID_PAGE(gpa))
kvm_set_mp_state(vcpu, KVM_MP_STATE_RUNNABLE);
}

static int sev_snp_ap_creation(struct vcpu_svm *svm)
{
struct kvm_sev_info *sev = to_kvm_sev_info(svm->vcpu.kvm);
Expand Down Expand Up @@ -4198,10 +4239,10 @@ static int sev_snp_ap_creation(struct vcpu_svm *svm)
return -EINVAL;
}

target_svm->sev_es.snp_vmsa_gpa = svm->vmcb->control.exit_info_2;
target_svm->sev_es.snp_pending_vmsa_gpa = svm->vmcb->control.exit_info_2;
break;
case SVM_VMGEXIT_AP_DESTROY:
target_svm->sev_es.snp_vmsa_gpa = INVALID_PAGE;
target_svm->sev_es.snp_pending_vmsa_gpa = INVALID_PAGE;
break;
default:
vcpu_unimpl(vcpu, "vmgexit: invalid AP creation request [%#x] from guest\n",
Expand Down Expand Up @@ -4889,6 +4930,8 @@ int sev_vcpu_create(struct kvm_vcpu *vcpu)
}

svm->sev_es.vmsa = page_address(vmsa_page);
svm->sev_es.snp_pending_vmsa_gpa = INVALID_PAGE;
svm->sev_es.snp_guest_vmsa_gpa = INVALID_PAGE;

vcpu->arch.guest_tsc_protected = snp_is_secure_tsc_enabled(vcpu->kvm);

Expand Down
8 changes: 4 additions & 4 deletions arch/x86/kvm/svm/svm.c
Original file line number Diff line number Diff line change
Expand Up @@ -5505,6 +5505,10 @@ struct kvm_x86_ops svm_x86_ops __initdata = {

.vm_copy_enc_context_from = sev_vm_copy_enc_context_from,
.vm_move_enc_context_from = sev_vm_move_enc_context_from,

.gmem_prepare = sev_gmem_prepare,
.gmem_invalidate = sev_gmem_invalidate,
.gmem_max_mapping_level = sev_gmem_max_mapping_level,
#endif
.check_emulate_instruction = svm_check_emulate_instruction,

Expand All @@ -5516,10 +5520,6 @@ struct kvm_x86_ops svm_x86_ops __initdata = {
.vcpu_deliver_sipi_vector = svm_vcpu_deliver_sipi_vector,
.vcpu_get_apicv_inhibit_reasons = avic_vcpu_get_apicv_inhibit_reasons,
.alloc_apic_backing_page = svm_alloc_apic_backing_page,

.gmem_prepare = sev_gmem_prepare,
.gmem_invalidate = sev_gmem_invalidate,
.gmem_max_mapping_level = sev_gmem_max_mapping_level,
};

/*
Expand Down
13 changes: 2 additions & 11 deletions arch/x86/kvm/svm/svm.h
Original file line number Diff line number Diff line change
Expand Up @@ -272,7 +272,8 @@ struct vcpu_sev_es_state {
u64 ghcb_registered_gpa;

struct mutex snp_vmsa_mutex; /* Used to handle concurrent updates of VMSA. */
gpa_t snp_vmsa_gpa;
gpa_t snp_pending_vmsa_gpa;
gpa_t snp_guest_vmsa_gpa;
bool snp_ap_waiting_for_reset;
bool snp_has_guest_vmsa;
#ifdef CONFIG_HYGON_CSV
Expand Down Expand Up @@ -1041,16 +1042,6 @@ static inline int sev_cpu_init(struct svm_cpu_data *sd) { return 0; }
static inline int sev_dev_get_attr(u32 group, u64 attr, u64 *val) { return -ENXIO; }
#define max_sev_asid 0
static inline void sev_handle_rmp_fault(struct kvm_vcpu *vcpu, gpa_t gpa, u64 error_code) {}
static inline int sev_gmem_prepare(struct kvm *kvm, kvm_pfn_t pfn, gfn_t gfn, int max_order)
{
return 0;
}
static inline void sev_gmem_invalidate(kvm_pfn_t start, kvm_pfn_t end) {}
static inline int sev_gmem_max_mapping_level(struct kvm *kvm, kvm_pfn_t pfn, bool is_private)
{
return 0;
}

static inline struct vmcb_save_area *sev_decrypt_vmsa(struct kvm_vcpu *vcpu)
{
return NULL;
Expand Down
8 changes: 4 additions & 4 deletions crypto/krb5/krb5_api.c
Original file line number Diff line number Diff line change
Expand Up @@ -263,10 +263,10 @@ struct crypto_aead *crypto_krb5_prepare_encryption(const struct krb5_enctype *kr
goto err;
}

kfree(keys.data);
kfree_sensitive(keys.data);
return ci;
err:
kfree(keys.data);
kfree_sensitive(keys.data);
return ERR_PTR(ret);
}
EXPORT_SYMBOL(crypto_krb5_prepare_encryption);
Expand Down Expand Up @@ -333,10 +333,10 @@ struct crypto_shash *crypto_krb5_prepare_checksum(const struct krb5_enctype *krb
goto err;
}

kfree(keys.data);
kfree_sensitive(keys.data);
return ci;
err:
kfree(keys.data);
kfree_sensitive(keys.data);
return ERR_PTR(ret);
}
EXPORT_SYMBOL(crypto_krb5_prepare_checksum);
Expand Down
1 change: 1 addition & 0 deletions drivers/accessibility/speakup/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -2444,6 +2444,7 @@ static int __init speakup_init(void)
mutex_lock(&spk_mutex);
synth_release();
mutex_unlock(&spk_mutex);
spk_ttyio_unregister_ldisc();
speakup_kobj_exit();

error_kobjects:
Expand Down
1 change: 0 additions & 1 deletion drivers/crypto/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -641,7 +641,6 @@ config CRYPTO_DEV_QCOM_RNG
tristate "Qualcomm Random Number Generator Driver"
depends on ARCH_QCOM || COMPILE_TEST
depends on HW_RANDOM
select CRYPTO_RNG
help
This driver provides support for the Random Number
Generator hardware found on Qualcomm SoCs.
Expand Down
16 changes: 0 additions & 16 deletions drivers/crypto/allwinner/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -70,14 +70,6 @@ config CRYPTO_DEV_SUN8I_CE_HASH
help
Say y to enable support for hash algorithms.

config CRYPTO_DEV_SUN8I_CE_PRNG
bool "Support for Allwinner Crypto Engine PRNG"
depends on CRYPTO_DEV_SUN8I_CE
select CRYPTO_RNG
help
Select this option if you want to provide kernel-side support for
the Pseudo-Random Number Generator found in the Crypto Engine.

config CRYPTO_DEV_SUN8I_CE_TRNG
bool "Support for Allwinner Crypto Engine TRNG"
depends on CRYPTO_DEV_SUN8I_CE
Expand Down Expand Up @@ -113,14 +105,6 @@ config CRYPTO_DEV_SUN8I_SS_DEBUG
This will create /sys/kernel/debug/sun8i-ss/stats for displaying
the number of requests per flow and per algorithm.

config CRYPTO_DEV_SUN8I_SS_PRNG
bool "Support for Allwinner Security System PRNG"
depends on CRYPTO_DEV_SUN8I_SS
select CRYPTO_RNG
help
Select this option if you want to provide kernel-side support for
the Pseudo-Random Number Generator found in the Security System.

config CRYPTO_DEV_SUN8I_SS_HASH
bool "Enable support for hash on sun8i-ss"
depends on CRYPTO_DEV_SUN8I_SS
Expand Down
1 change: 0 additions & 1 deletion drivers/crypto/allwinner/sun8i-ce/Makefile
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
obj-$(CONFIG_CRYPTO_DEV_SUN8I_CE) += sun8i-ce.o
sun8i-ce-y += sun8i-ce-core.o sun8i-ce-cipher.o
sun8i-ce-$(CONFIG_CRYPTO_DEV_SUN8I_CE_HASH) += sun8i-ce-hash.o
sun8i-ce-$(CONFIG_CRYPTO_DEV_SUN8I_CE_PRNG) += sun8i-ce-prng.o
sun8i-ce-$(CONFIG_CRYPTO_DEV_SUN8I_CE_TRNG) += sun8i-ce-trng.o
Loading