Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

rust: Enable KCFI support #1034

Open
wants to merge 1,087 commits into
base: rust-next
Choose a base branch
from
Open

rust: Enable KCFI support #1034

wants to merge 1,087 commits into from

Conversation

maurer
Copy link

@maurer maurer commented Sep 12, 2023

This won't currently work with existing stable Rust releases. It does work with rustc-1.72 with some modifications:
Anti-ICE patches:

KCFI disablement :( (Currently trying to figure out how to avoid this, will likely need to generate stubs in the compiler.)

Copy link
Member

@ojeda ojeda left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks Matthew! A few nits below that I saw. Also, for upstreaming this eventually (I guess after we get to the right rustc version that has those fixes in already?), I would recommend 3 commits:

  • The From change.
  • The Array support.
  • The KCFI change.

arch/x86/Makefile Outdated Show resolved Hide resolved
scripts/generate_rust_target.rs Outdated Show resolved Hide resolved
Makefile Outdated Show resolved Hide resolved
scripts/generate_rust_target.rs Outdated Show resolved Hide resolved
Makefile Show resolved Hide resolved
arch/Kconfig Outdated Show resolved Hide resolved
Makefile Outdated Show resolved Hide resolved
@maurer maurer force-pushed the kcfi branch 2 times, most recently from 23efd72 to f705f8c Compare September 15, 2023 00:10
@maurer
Copy link
Author

maurer commented Sep 15, 2023

I believe I've addressed folks suggestions here.

nhatsmrt and others added 26 commits October 27, 2023 20:49
During a zswap store attempt, the compression algorithm could fail (for
e.g due to the page containing incompressible random data).  This is not
tracked in any of existing zswap counters, making it hard to monitor for
and investigate.  We have run into this problem several times in our
internal investigations on zswap store failures.

This patch adds a dedicated debugfs counter for compression algorithm
failures.

Link: https://lkml.kernel.org/r/[email protected]
Signed-off-by: Nhat Pham <[email protected]>
Reviewed-by: Sergey Senozhatsky <[email protected]>
Cc: Dan Streetman <[email protected]>
Cc: Domenico Cerasuolo <[email protected]>
Cc: Johannes Weiner <[email protected]>
Cc: Michal Hocko <[email protected]>
Cc: Muchun Song <[email protected]>
Cc: Roman Gushchin <[email protected]>
Cc: Seth Jennings <[email protected]>
Cc: Shakeel Butt <[email protected]>
Cc: Vitaly Wool <[email protected]>
Cc: Yosry Ahmed <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
LKP reported smatch warning as below:

===================
smatch warnings:
mm/vmalloc.c:3689 vread_iter() error: we previously assumed 'vm' could be null (see line 3667)
......
06c8994  @3667 size = vm ? get_vm_area_size(vm) : va_size(va);
......
06c8994  @3689 else if (!(vm->flags & VM_IOREMAP))
                                 ^^^^^^^^^
Unchecked dereference
=====================

This is not a runtime bug because the possible null 'vm' in the
pointed place could only happen when flags == VMAP_BLOCK.  However, the
case 'flags == VMAP_BLOCK' should never happen and has been detected
with WARN_ON.  Please check vm_map_ram() implementation and the earlier
checking in vread_iter() at below:

                ~~~~~~~~~~~~~~~~~~~~~~~~~~
                /*
                 * VMAP_BLOCK indicates a sub-type of vm_map_ram area, need
                 * be set together with VMAP_RAM.
                 */
                WARN_ON(flags == VMAP_BLOCK);

                if (!vm && !flags)
                        continue;
                ~~~~~~~~~~~~~~~~~~~~~~~~~~

So add checking on whether 'vm' could be null when dereferencing it in
vread_iter(). This mutes smatch complaint.

Link: https://lkml.kernel.org/r/ZTCURc8ZQE+KrTvS@MiWiFi-R3L-srv
Link: https://lkml.kernel.org/r/ZS/2k6DIMd0tZRgK@MiWiFi-R3L-srv
Signed-off-by: Baoquan He <[email protected]>
Reported-by: kernel test robot <[email protected]>
Reported-by: Dan Carpenter <[email protected]>
Closes: https://lore.kernel.org/r/[email protected]/
Cc: Lorenzo Stoakes <[email protected]>
Cc: Philip Li <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
The "first" is spelled "fist".

Link: https://lkml.kernel.org/r/[email protected]
Signed-off-by: Tom Yang <[email protected]>
Reviewed-by: Liam R. Howlett <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
We recently encountered a bug that makes all zswap store attempt fail. 
Specifically, after:

"141fdeececb3 mm/zswap: delay the initialization of zswap"

if we build a kernel with zswap disabled by default, then enabled after
the swapfile is set up, the zswap tree will not be initialized.  As a
result, all zswap store calls will be short-circuited.  We have to perform
another swapon to get zswap working properly again.

Fortunately, this issue has since been fixed by the patch that kills
frontswap:

"42c06a0e8ebe mm: kill frontswap"

which performs zswap_swapon() unconditionally, i.e always initializing
the zswap tree.

This test add a sanity check that ensure zswap storing works as
intended.

Link: https://lkml.kernel.org/r/[email protected]
Signed-off-by: Nhat Pham <[email protected]>
Acked-by: Rik van Riel <[email protected]>
Cc: Domenico Cerasuolo <[email protected]>
Cc: Johannes Weiner <[email protected]>
Cc: Shuah Khan <[email protected]>
Cc: Tejun Heo <[email protected]>
Cc: Zefan Li <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
The BUG_ON() at ocfs2_num_free_extents() handles the error that
l_tree_deepth of leaf extent block just read form disk is invalid.  This
error is mostly caused by file system metadata corruption on the disk. 
There is no need to call BUG_ON() to handle such errors.  We can return
error code, since the caller can deal with errors from
ocfs2_num_free_extents().  Also, we should make the file system read-only
to avoid the damage from expanding.

Therefore, BUG_ON() is removed and ocfs2_error() is called instead.

Link: https://lkml.kernel.org/r/[email protected]
Signed-off-by: Jia Rui <[email protected]>
Reviewed-by: Joseph Qi <[email protected]>
Cc: Mark Fasheh <[email protected]>
Cc: Joel Becker <[email protected]>
Cc: Junxiao Bi <[email protected]>
Cc: Changwei Ge <[email protected]>
Cc: Gang He <[email protected]>
Cc: Jun Piao <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Rather than while_each_thread() which should be avoided when possible.

This makes the code more clear and allows the next change.

Link: https://lkml.kernel.org/r/[email protected]
Signed-off-by: Oleg Nesterov <[email protected]>
Cc: "Eric W. Biederman" <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Rather than lock_task_sighand(), sig->stats_lock was specifically designed
for this type of use.

This way the "if (whole)" branch runs lockless in the likely case.

Link: https://lkml.kernel.org/r/[email protected]
Signed-off-by: Oleg Nesterov <[email protected]>
Cc: "Eric W. Biederman" <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
./fs/proc/base.c:3829:2-3: Unneeded semicolon

Link: https://lkml.kernel.org/r/[email protected]
Signed-off-by: Yang Li <[email protected]>
Reported-by: Abaci Robot <[email protected]>
Closes: https://bugzilla.openanolis.cn/show_bug.cgi?id=7057
Acked-by: Oleg Nesterov <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
* fix embarassing /proc/*/smaps test bug due to a typo in variable name
  it tested only the first line of the output if vsyscall is enabled:

  	ffffffffff600000-ffffffffff601000 r-xp ...

  so test passed but tested only VMA location and permissions.

* add "KSM" entry, unnoticed because (1)

* swap "r-xp" and "--xp" vsyscall test strings,
  also unnoticed because (1)

Link: https://lkml.kernel.org/r/76f42cce-b1ab-45ec-b6b2-4c64f0dccb90@p183
Signed-off-by: Alexey Dobriyan <[email protected]>
Cc: Swarup Laxman Kotiaklapudi <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Check ProtectionKey field in /proc/*/smaps output, if system supports
protection keys feature.

[[email protected]: test support in the beginning of the program, use syscall, not glibc pkey_alloc(3) which may not compile]

Link: https://lkml.kernel.org/r/ac05efa7-d2a0-48ad-b704-ffdd5450582e@p183
Signed-off-by: Swarup Laxman Kotiaklapudi <[email protected]>
Signed-off-by: Alexey Dobriyan <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Fix a spelling typo in comment.

Link: https://lkml.kernel.org/r/[email protected]
Signed-off-by: Kunwu Chan <[email protected]>
Acked-by: Joseph Qi <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
csr_sscratch CSR holds current task_struct address when hart is in user
space.  Trap handler on entry spills csr_sscratch into "tp" (x2) register
and zeroes out csr_sscratch CSR.  Trap handler on exit reloads "tp" with
expected user mode value and place current task_struct address again in
csr_sscratch CSR.

This patch assumes "tp" is pointing to task_struct. If value in
csr_sscratch is numerically greater than "tp" then it assumes csr_sscratch
is correct address of current task_struct. This logic holds when
   - hart is in user space, "tp" will be less than csr_sscratch.
   - hart is in kernel space but not in trap handler, "tp" will be more
     than csr_sscratch (csr_sscratch being equal to 0).
   - hart is executing trap handler
       - "tp" is still pointing to user mode but csr_sscratch contains
          ptr to task_struct. Thus numerically higher.
       - "tp" is  pointing to task_struct but csr_sscratch now contains
          either 0 or numerically smaller value (transiently holds
          user mode tp)

Link: https://lkml.kernel.org/r/[email protected]
Signed-off-by: Deepak Gupta <[email protected]>
Reviewed-by: Andrew Jones <[email protected]>
Reviewed-by: Palmer Dabbelt <[email protected]>
Acked-by: Palmer Dabbelt <[email protected]>
Tested-by: Hsieh-Tseng Shen <[email protected]>
Cc: Albert Ou <[email protected]>
Cc: Glenn Washburn <[email protected]>
Cc: Jan Kiszka <[email protected]>
Cc: Jeff Xie <[email protected]>
Cc: Kieran Bingham <[email protected]>
Cc: Palmer Dabbelt <[email protected]>
Cc: Paul Walmsley <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Restricted CXL Host (RCH) Error Handling undoes the topology munging of
CXL 1.1 to enabled some AER recovery, and lands some base infrastructure
for handling Root-Complex-Event-Collectors (RCECs) with CXL. Include
this long running series finally for v6.7.
Merge some prep-work for CXL QOS class support. This cycle saw large
collisions with mm on this topic, so the bulk of this topic needs to
wait.
Pickup some misc. CXL updates for v6.7.
Add the committed decoder sysfs attribute for v6.7.
Pick up a NULL dereference bug fix.

Signed-off-by: Ingo Molnar <[email protected]>
 # New commits in irq/urgent:
    f199bf5 ("irqchip/gic-v3-its: Don't override quirk settings with default values")

Signed-off-by: Ingo Molnar <[email protected]>
 # New commits in perf/urgent:
    3374491 ("perf/x86/intel: Support branch counters logging")
    318c498 ("perf/x86/intel: Reorganize attrs and is_visible")
    1f2376c ("perf: Add branch_sample_call_stack")
    85846b2 ("perf/x86: Add PERF_X86_EVENT_NEEDS_BRANCH_STACK flag")
    571d91d ("perf: Add branch stack counters")
    a71ef31 ("perf/core: Fix potential NULL deref")
    744940f ("perf/x86/amd/uncore: Pass through error code for initialization failures, instead of -ENODEV")
    7543365 ("perf/x86/amd/uncore: Fix uninitialized return value in amd_uncore_init()")
    deedec0 ("x86/cpu: Fix the AMD Fam 17h, Fam 19h, Zen2 and Zen4 MSR enumerations")
    f06cc66 ("perf: Optimize perf_cgroup_switch()")
    25e5684 ("perf/x86/amd/uncore: Add memory controller support")
    83a43c6 ("perf/x86/amd/uncore: Add group exclusivity")
    7ef0343 ("perf/x86/amd/uncore: Use rdmsr if rdpmc is unavailable")
    07888da ("perf/x86/amd/uncore: Move discovery and registration")
    d6389d3 ("perf/x86/amd/uncore: Refactor uncore management")
    1765bb6 ("perf/core: Allow reading package events from perf_event_read_local")
    05276d4 ("perf/x86/cstate: Allow reading the package statistics from local CPU")
    38cd5b6 ("perf/x86/intel/pt: Fix kernel-doc comments")
    a56d555 ("perf/x86/rapl: Annotate 'struct rapl_pmus' with __counted_by")
    e6814ec ("perf/core: Rename perf_proc_update_handler() -> perf_event_max_sample_rate_handler(), for readability")
    618e77d ("perf/x86/rapl: Fix "Using plain integer as NULL pointer" Sparse warning")
    bcc6ec3 ("perf/x86/rapl: Use local64_try_cmpxchg in rapl_event_update()")
    1ce19bf ("perf/x86/rapl: Stop doing cpu_relax() in the local64_cmpxchg() loop in rapl_event_update()")
    54aee5f ("perf/core: Bail out early if the request AUX area is out of bound")
    ffbe4ab ("perf/x86/intel: Extend the ref-cycles event to GP counters")
    950ecdc ("perf/x86/intel: Fix broken fixed event constraints extension")
    97588df ("perf/x86/intel: Add common intel_pmu_init_hybrid()")
    b0560bf ("perf/x86/intel: Clean up the hybrid CPU type handling code")
    299a5fc ("perf/x86/intel: Apply the common initialization code for ADL")
    d87d221 ("perf/x86/intel: Factor out the initialization code for ADL e-core")
    0ba0c03 ("perf/x86/intel: Factor out the initialization code for SPR")
    d4b5694 ("perf/x86/intel: Use the common uarch name for the shared functions")

Signed-off-by: Ingo Molnar <[email protected]>
 # New commits in x86/urgent:
    bd94d86 ("x86/tsc: Defer marking TSC unstable to a worker")
    128b0c9 ("x86/i8259: Skip probing when ACPI/MADT advertises PCAT compatibility")
    b99d70c ("x86/cpu: Add model number for Intel Arrow Lake mobile processor")

Signed-off-by: Ingo Molnar <[email protected]>
 # New commits in x86/merge:
    50dcc2e ("x86/boot: efistub: Assign global boot_params variable")
    d55d5bc ("x86/boot: Rename conflicting 'boot_params' pointer to 'boot_params_ptr'")
    d2a285d ("x86/head/64: Move the __head definition to <asm/init.h>")
    7f6874e ("x86/head/64: Add missing __head annotation to startup_64_load_idt()")
    dc62830 ("x86/head/64: Mark 'startup_gdt[]' and 'startup_gdt_descr' as __initdata")
    92fe9bb ("x86/apic, x86/hyperv: Use u32 in hv_snp_boot_ap() too")
    48525fd ("x86/cpu: Provide debug interface")
    90781f0 ("x86/cpu/topology: Cure the abuse of cpuinfo for persisting logical ids")
    db4a408 ("x86/apic: Use u32 for wakeup_secondary_cpu[_64]()")
    59f7928 ("x86/apic: Use u32 for [gs]et_apic_id()")
    01ccf9b ("x86/apic: Use u32 for phys_pkg_id()")
    8aa2a41 ("x86/apic: Use u32 for cpu_present_to_apicid()")
    5d376b8 ("x86/apic: Use u32 for check_apicid_used()")
    4705243 ("x86/apic: Use u32 for APIC IDs in global data")
    9ff4275 ("x86/apic: Use BAD_APICID consistently")
    6e29032 ("x86/cpu: Move cpu_l[l2]c_id into topology info")
    22dc963 ("x86/cpu: Move logical package and die IDs into topology info")
    594957d ("x86/cpu: Remove pointless evaluation of x86_coreid_bits")
    e3c0c5d ("x86/cpu: Move cu_id into topology info")
    e952563 ("x86/cpu: Move cpu_core_id into topology info")
    94f0b39 ("hwmon: (fam15h_power) Use topology_core_id()")
    0925367 ("scsi: lpfc: Use topology_core_id()")
    8a169ed ("x86/cpu: Move cpu_die_id into topology info")
    02fb601 ("x86/cpu: Move phys_proc_id into topology info")
    b9655e7 ("x86/cpu: Encapsulate topology information in cpuinfo_x86")
    965e05f ("x86/apic: Fake primary thread mask for XEN/PV")
    d91bdd9 ("cpu/SMT: Make SMT control more robust against enumeration failures")
    ee545b9 ("x86/cpu/hygon: Fix the CPU topology evaluation for real")
    9f76d60 ("x86/boot: Harmonize the style of array-type parameter for fixup_pointer() calls")
    001470f ("x86/boot: Fix incorrect startup_gdt_descr.size")
    b3bee1e ("x86/boot: Compile boot code with -std=gnu11 too")
    3e3eabe ("x86/boot: Increase section and file alignment to 4k/512")
    34951f3 ("x86/boot: Split off PE/COFF .data section")
    fa57505 ("x86/boot: Drop PE/COFF .reloc section")
    efa089e ("x86/boot: Construct PE/COFF .text section from assembler")
    aeb9206 ("x86/boot: Derive file size from _edata symbol")
    093ab25 ("x86/boot: Define setup size in linker script")
    eac9563 ("x86/boot: Set EFI handover offset directly in header asm")
    2e765c0 ("x86/boot: Grab kernel_info offset from zoffset header directly")
    b618d31 ("x86/boot: Drop references to startup_64")
    7448e8e ("x86/boot: Drop redundant code setting the root device")
    8eace5b ("x86/boot: Omit compression buffer from PE/COFF image memory footprint")
    768171d ("x86/boot: Remove the 'bugger off' message")
    bfab35f ("x86/efi: Drop alignment flags from PE section headers")
    7e50262 ("x86/efi: Disregard setup header of loaded image")
    5f51c5d ("x86/efi: Drop EFI stub .bss from .data section")

Signed-off-by: Ingo Molnar <[email protected]>
 # New commits in core/core:
    1aabbc5 ("signal: Don't disable preemption in ptrace_stop() on PREEMPT_RT")
    a20d6f6 ("signal: Add a proper comment about preempt_disable() in ptrace_stop()")

Signed-off-by: Ingo Molnar <[email protected]>
 # New commits in irq/core:
    f99b926 ("irqchip/sifive-plic: Fix syscore registration for multi-socket systems")
    08d4c17 ("irqchip/ls-scfg-msi: Use device_get_match_data()")
    5e7afb2 ("genirq/generic_chip: Make irq_remove_generic_chip() irqdomain aware")
    a0b0bad ("genirq/matrix: Exclude managed interrupts in irq_matrix_allocated()")
    41efa43 ("PCI/MSI: Provide stubs for IMS functions")
    f881feb ("irqchip/renesas-rzg2l: Enhance driver to support interrupt affinity setting")
    021a8ca ("genirq/generic-chip: Fix the irq_chip name for /proc/interrupts")
    6260ecd ("irqdomain: Annotate struct irq_domain with __counted_by")

Signed-off-by: Ingo Molnar <[email protected]>
 # New commits in locking/core:
    c73801a ("futex: Don't include process MM in futex key on no-MMU")
    184fdf9 ("locking/seqlock: Fix grammar in comment")
    dcc1345 ("alpha: Fix up new futex syscall numbers")
    886ee55 ("locking/seqlock: Propagate 'const' pointers within read-only methods, remove forced type casts")
    ac8b60b ("locking/lockdep: Fix string sizing bug that triggers a format-truncation compiler-warning")
    e6115c6 ("locking/seqlock: Change __seqprop() to return the function pointer")
    f995443 ("locking/seqlock: Simplify SEQCOUNT_LOCKNAME()")
    4fbf8b1 ("locking/atomics: Use atomic_try_cmpxchg_release() to micro-optimize rcuref_put_slowpath()")
    ad0a2e4 ("locking/atomic, xen: Use sync_try_cmpxchg() instead of sync_cmpxchg()")
    636d6a8 ("locking/atomic/x86: Introduce arch_sync_try_cmpxchg()")
    e01cc1e ("locking/atomic: Add generic support for sync_try_cmpxchg() and its fallback")
    0cff993 ("locking/seqlock: Fix typo in comment")
    01a99a7 ("futex/requeue: Remove unnecessary ‘NULL’ initialization from futex_proxy_trylock_atomic()")
    5e0eb67 ("locking/local, arch: Rewrite local_add_unless() as a static inline function")
    8788c6c ("locking/debug: Fix debugfs API return value checks to use IS_ERR()")
    cfa92b6 ("locking/ww_mutex/test: Make sure we bail out instead of livelock")
    bccdd80 ("locking/ww_mutex/test: Fix potential workqueue corruption")
    4812c54 ("locking/ww_mutex/test: Use prng instead of rng to avoid hangs at bootup")
    0f4b5f9 ("futex: Add sys_futex_requeue()")
    27b88f3 ("futex: Add flags2 argument to futex_requeue()")
    3b63a55 ("futex: Propagate flags into get_futex_key()")
    cb8c431 ("futex: Add sys_futex_wait()")
    43adf84 ("futex: FLAGS_STRICT")
    9f6c532 ("futex: Add sys_futex_wake()")
    698eb82 ("futex: Validate futex value against futex size")
    5694289 ("futex: Flag conversion")
    d6d08d2 ("futex: Extend the FUTEX2 flags")
    4923954 ("futex: Clarify FUTEX2 flags")
    c6f4a90 ("asm-generic: ticket-lock: Optimize arch_spin_value_unlocked()")
    fbeb558 ("futex/pi: Fix recursive rt_mutex waiter state")
    45f67f3 ("locking/rtmutex: Add a lockdep assert to catch potential nested blocking")
    d14f9e9 ("locking/rtmutex: Use rt_mutex specific scheduler helpers")
    6b596e6 ("sched: Provide rt_mutex specific scheduler helpers")
    de1474b ("sched: Extract __schedule_loop()")
    af9f006 ("locking/rtmutex: Avoid unconditional slowpath for DEBUG_RT_MUTEXES")
    28bc55f ("sched: Constrain locks in sched_submit_work()")
    a432b7c ("locking/lockref/x86: Enable ARCH_USE_CMPXCHG_LOCKREF for X86_CMPXCHG64")
    e35a6cf ("futex: Use a folio instead of a page")
    85be6d8 ("cleanup: Make no_free_ptr() __must_check")

Signed-off-by: Ingo Molnar <[email protected]>
 # New commits in objtool/core:
    60fd39a ("scripts/faddr2line: Skip over mapping symbols in output from readelf")
    86bf86e ("scripts/faddr2line: Use LLVM addr2line and readelf if LLVM=1")
    180af1a ("scripts/faddr2line: Don't filter out non-function symbols from readelf")
    f404a58 ("objtool: Remove max symbol name length limitation")
    e959c27 ("objtool: Propagate early errors")
    758a743 ("objtool: Use 'the fallthrough' pseudo-keyword")
    b8ec60e ("x86/speculation, objtool: Use absolute relocations for annotations")
    fef44eb ("x86/unwind/orc: Remove redundant initialization of 'mid' pointer in __orc_find()")

Signed-off-by: Ingo Molnar <[email protected]>
sfrothwell and others added 17 commits October 30, 2023 15:04
…git/pateldipen1984/linux.git

# Conflicts:
#	drivers/hte/Kconfig
…git/jgg/iommufd.git

# Conflicts:
#	drivers/iommu/iommufd/selftest.c
#	include/linux/iommu.h
interacting with "net/tcp: Introduce TCP_AO setsockopt()s"

Signed-off-by: Stephen Rothwell <[email protected]>
This makes it easier to deal with nested objects or arrays.

Signed-off-by: Matthew Maurer <[email protected]>
Some configurations, such as enabled sanitizers, are arrays

Signed-off-by: Matthew Maurer <[email protected]>
On newer clang, a flag is available which makes KCFI compatibility with
rustc possible without significant contortions.

Signed-off-by: Matthew Maurer <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

Successfully merging this pull request may close these issues.