nullfs: do not allow to mount a vnode over itself
This causes recursion in VFS that is not worth handling.
PR: 275570
Reported by: Alex S <iwtcex at gmail.com>
Reviewed by: markj
Tested by: pho
Sponsored by: The FreeBSD Foundation
MFC after: 1 week
Differential revision: https://reviews.freebsd.org/D57043
[LV] Extract helper to simplify phi removal in connectEpiVectorL (NFC) (#198203)
Extract the repeated edge-redirect + DomTree update pattern into a
RedirectEdge lambda, and convert the separate removeIncomingValue calls
for check blocks into a loop.
[JTS] Readd assertion
Now that VP metadata has been cleaned up a little bit, we can reenable
this assertion.
Reviewers: alexander-shaposhnikov, mtrofin
Pull Request: https://github.com/llvm/llvm-project/pull/198141
[InstCombine] Convert logical and/or with trunc nuw to i1 into bitwise ops (#198178)
if it is know that `trunc nuw to i1 ` can not be poison logical and/or
can be folded to bitwise ops.
proof https://alive2.llvm.org/ce/z/xQ2Sj-
[libc++] Require the exact assignment expression to be trivial in __uninitialized_allocator_copy_impl
__uninitialized_allocator_copy_impl has an optimization that replaces allocator_traits::construct with std::copy for raw pointer ranges when the element type is trivially copy constructible and trivially copy assignable.
The copy-assignment trait only checks whether assignment from const T& is trivial. That is weaker than the expression used by std::copy, which evaluates *out = *in. If overload resolution selects a different non-trivial assignment operator for that expression, std::copy can call that operator on uninitialized storage.
Check is_trivially_assignable<_Out&, _In&> instead in both header copies. This matches the assignment expression used by std::copy, preserves the optimized path when that assignment is actually trivial, and avoids making non-const raw pointer callers select the generic allocator_traits::construct overload due to a qualification conversion.
Add a vector copy-constructor regression test with a type whose defaulted copy assignment is trivial but whose templated assignment operator is selected for non-const lvalue sources.
Tested with:
build-libcxx-fresh/bin/llvm-lit -q libcxx/test/std/containers/sequences/vector/vector.cons/copy.pass.cpp libcxx/test/libcxx/memory/uninitialized_allocator_copy.pass.cpp
build-libcxx-fresh/bin/llvm-lit -q --param std=c++03 libcxx/test/libcxx/memory/uninitialized_allocator_copy.pass.cpp
build-libcxx-fresh/bin/llvm-lit -q --param std=c++20 libcxx/test/std/containers/sequences/vector/vector.cons/copy.pass.cpp
build-libcxx-fresh/bin/llvm-lit -q --param std=c++11 libcxx/test/std/containers/sequences/vector/vector.cons/copy.pass.cpp
[sanitizer][test] Fix coverage-module-unloaded.cpp etc. on Solaris (#198164)
When switching `clang++` to the default Solaris 11.4 compilation
environment, XPG7 + extensions, two tests `FAIL`:
```
AddressSanitizer-i386-sunos :: TestCases/Posix/coverage-module-unloaded.cpp
AddressSanitizer-i386-sunos-dynamic :: TestCases/Posix/coverage-module-unloaded.cpp
SanitizerCommon-asan-i386-SunOS :: get_module_and_offset_for_pc.cpp
SanitizerCommon-ubsan-i386-SunOS :: get_module_and_offset_for_pc.cpp
SanitizerCommon-ubsan-x86_64-SunOS :: get_module_and_offset_for_pc.cpp
```
The failure mode is the same in both cases: the tests fail to link with
`main` undefined. This happens because `<sys/mman.h>` defines
```
#define SHARED 0x10
[13 lines not shown]
zap_impl: use flex array field for mzap_phys_t.mz_chunks
mz_phys_t is always a full-block allocation, with mz_chunks[] as an
array over the rest of the block past the header.
Recent Linux compiled with CONFIG_UBSAN will complain about this:
UBSAN: array-index-out-of-bounds in module/zfs/zap.c:1236:28
index 2 is out of range for type 'mzap_ent_phys_t [1]'
The fix is straightforward; simply convert this field to a flex member.
Sponsored-by: TrueNAS
Reviewed-by: Brian Behlendorf <behlendorf1 at llnl.gov>
Signed-off-by: Rob Norris <rob.norris at truenas.com>
Closes #18550
Merge tag 'trace-v7.1-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace
Pull tracing fixes from Steven Rostedt:
- Add more functions to the remote allowed list
randconfig found more functions that are allowed for the remote code
for s390 and arm. Add them to the allowed list.
- Fix remote_test error path
If one of the simple ring buffers fails to load, the code is supposed
to rollback its initialized buffers. Instead of rolling back the
buffers for the failed load, it uses the global variable and rolls
back all the successfully loaded buffers.
* tag 'trace-v7.1-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace:
tracing: Fix desc in error path for the trace remote test module
ring-buffer remote: Avoid unexpected symbol warnings (arm, s390)
[mlir][SPIR-V] Fix math.powf lowering for non-integer exponents (#197727)
The ConvertFToS usage only works when y is an integer. Use it only for
integer constants, for others: lower as GL.Exp(y * GL.Log(x))
wip/py-dbgpu: import py-dbgpu-2025.12
A small, easy-to-use open source database of over 2000 GPUs with
architecture, manufacturing, API support and performance details
sourced from TechPowerUp.
[AArch64] Fix handling of x29/x30 in inline assembly clobbers (#167783)
The AArch64 backend was silently ignoring inline assembly clobbers when
numeric register names (x29, x30) were used instead of their
architectural aliases (fp, lr). I found this bug via inline assembly
in Zig, which not normalize the register names the way clang does.
There is an incoplete workaround for this in Rust, but that only
handles `x30/lr`, not `x29/fp`. I thought it would make
sense to fix this properly rather than adding a workaround to Zig.
This patch adds explicit handling in getRegForInlineAsmConstraint() to
map both numeric and alias forms to the correct physical registers,
following the same pattern used by the RISC-V backend.
I've left `x31/sp` without changes, it would nice to have to have
warning when trying to clobber `x31`, just like there is for `sp`,
but that register needs different handling, so it's best done
separately.
[24 lines not shown]
virt: sev-guest: Do not use host-controlled page order in cleanup path
When issuing an extended guest request (SVM_VMGEXIT_EXT_GUEST_REQUEST),
get_ext_report() allocates a buffer to retrieve a certificate blob from the
host, keeping track of its size in report_req->certs_len.
However, the host may return SNP_GUEST_VMM_ERR_INVALID_LEN, indicating
an invalid buffer size, as well as the expected length of such buffer.
get_ext_report() subsequently updates report_req->certs_len with the
host-controlled value, and cleans up the buffer by computing a page order
from such value. This is incorrect, as the host-provided length may not
match the page order of the original allocation, potentially resulting
in corruption in the page allocator.
Fix this by using alloc_pages_exact() instead, and reusing @npages to
compute the size passed to free_pages_exact(). For consistency, also
use @npages to compute the size when allocating the pages, even though
this last change has no functional effect.
[6 lines not shown]
Merge tag 'x86-urgent-2026-05-17' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull x86 fix from Ingo Molnar:
- Fix x86 boot crash for non-kjump kexecs (David Woodhouse)
* tag 'x86-urgent-2026-05-17' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
x86/kexec: Push kjump return address even for non-kjump kexec
interfaces: dhclient.conf doesn't cope with multi-line request/require #10318
This was changed in 26.1.8 for security reasons since it appeared it would,
but the parser only reads the last statement. Put them back on a single line.