kext | FUSE kernel extension | Storage library
kandi X-RAY | kext Summary
kandi X-RAY | kext Summary
FUSE kernel extension
Support
Quality
Security
License
Reuse
Top functions reviewed by kandi - BETA
Currently covering the most popular Java, JavaScript and Python libraries. See a Sample of kext
kext Key Features
kext Examples and Code Snippets
Community Discussions
Trending Discussions on kext
QUESTION
I'm working on a procfs kernel extension for macOS and trying to implement a feature that emulates Linux’s /proc/cpuinfo similar to what FreeBSD does with its linprocfs. Since I'm trying to learn, and since not every bit of FreeBSD code can simply be copied over to XNU and be expected to work right out of the jar, I'm writing this feature from scratch, with FreeBSD and NetBSD's linux-based procfs features as a reference. Anyways...
Under Linux, $cat /proc/cpuinfo showes me something like this:
...ANSWER
Answered 2022-Mar-18 at 07:54There is no need to allocate memory for this task: pass a pointer to a local array along with its size and use strlcat
properly:
QUESTION
How to memory-map a PCI Base Address Register (BAR) from a PCIDriverKit driver (DEXT) to a userspace application?
Memory-mapping from a driver extension to an application can be accomplished by implementing the IOUserClient::CopyClientMemoryForType in the user client subclass (on the driver side) and then calling IOConnectMapMemory64 (from the user-space application side). This has been very nicely and thoroughly explained in this related answer.
The only missing bit is getting an IOMemoryDescriptor corresponding to the desired PCI BAR in order to return it from the CopyClientMemoryForType
implementation.
Asked another way, given the following simplified code, what would be the implementation of imaginaryFunctionWhichReturnsTheBARBuffer
?
ANSWER
Answered 2022-Jan-16 at 17:01Turns out IOPCIDevice::_CopyDeviceMemoryWithIndex
was indeed the function needed to implement this (but the fact that it's private is still an inconvenient).
Bellow is some sample code showing how this could be implemented (the code uses MyDriver
for the driver class name and MyDriverUserClient
for the user client).
Relevant sections from MyDriver.cpp
implementation:
QUESTION
I'm trying to generate a .plist file with plistlib
library, available in macOS Python 2.7.
The following code works:
...ANSWER
Answered 2021-Sep-30 at 03:43The desired output does not look correct. Your "dictionary of dictionary" does not have a key with it. I suspect it should be something like
QUESTION
This is my MacBook Pro details overview:
- Model Name: MacBook Pro
- Chip: Apple M1
- Total Number of Cores: 8 (4 performance and 4 efficiency)
- Memory: 8 GB
- System Version: macOS 11.2.2 (20D80) -- macOS Big Sur
Andriod Studio Preview for Arm64 M1 Chip details are as shown in below image:
...ANSWER
Answered 2021-Aug-05 at 05:51I have updated to latest Android Studio preview release on my MacBook Pro. It's not crashing now. You can find all android studio release and its preview release here: https://developer.android.com/studio/archive
QUESTION
kernel: DK: MyDriver-0x100000f45: provider entitlements check failed
kernel: DK: IOUserServer(com.MyDriver-0x100000f45)::exit(Entitlements check failed)
kernel: (com.MyDriver.dext) Kernel requested exit (Entitlements check failed)
...ANSWER
Answered 2021-Jul-11 at 19:39I don't have a 100% answer as to why it's going wrong in your case. To load a dext on an unmodified system, you definitely need the following when codesigning your dext:
- Sign with a 'Developer ID Application' certificate identity and be notarised, or signed with an 'Apple Developer' certificate
- Embedded code signing entitlements including the generic DriverKit entitlement, any family-specific entitlements, and entitlements regarding user client access if necessary.
- A provisioning profile from Apple which matches:
- The code signing entitlements you are embedding in the dext.
- The type and specific instance of the code signing identity you are using to sign the dext.
- The Application & Bundle ID of the dext.
- If using an Apple Developer signing identity, the hardware IDs of the Macs on which you will be testing the dext.
For local testing, you can try the following things to temporarily work around code signing issues:
- Disabling System Integrity Protection (SIP). For purposes of DriverKit extensions, this disables some codesigning checks.
- Disabling DriverKit-specific entitlements checks. This turns off checking for a lot of family-specific entitlements. To disable the checks, set flag
0x8000
in thedk
kernel boot argument, which is a bitfield. Note that unless you set flag0x1
, DriverKit will be entirely disabled. So usedk=0x8001
to disable DriverKit entitlement checks. - Disabling AMFI checks. AMFI will normally kill your process if you try to claim entitlements which need to be enabled in a provisioning profile. You can disable AMFI with the
amfi_get_out_of_my_way=1
kernel boot argument.
Obviously, you only have limited control over the provisioning profile, as the entitlements in it must be approved by Apple. (For this reason, if you're planning to ship your dext publicly, I generally recommend you try to work out what entitlements you might need before starting full development on the dext, and request them from Apple. The process can take months.) So while it would be interesting to know the exact minimum combination of workarounds required when you don't have these profiles, I haven't exhaustively tested this out yet. I realise this doesn't help much with getting your dext as close to shipping as possible while still waiting for Apple to grant missing entitlements. Hopefully one of these days I can systematically explore and document all of this.
QUESTION
we have developed a kernel extension (KEXT) for a virtual file system (VFS) on macOS to integrate our software with external programs like Adobe InDesign or Microsoft Word. Our software and the KEXT are used by many of our customers.
As it looks like KEXTs are deprecated and may be removed completely in future versions of macOS, particularly on Apple Silicon based computers. See e.g. Apple's announcement in its security guide:
"This is why developers are being strongly encouraged to adopt system extensions before kext support is removed from macOS for future Mac computers with Apple silicon"
Therefore we are currently investigating in possible alternatives.
Apple suggests to migrate to System Extensions instead of KEXTs. However, the only VFS related API we found is to implement a File Provider that is based on an NSFileProviderReplicatedExtension.
Unfortunately that NSFileProviderReplicatedExtension
has several flaws:
- Files can either be in the cloud or downloaded. It is not possible to download/read only a portion of a file. This is a big performance problem for us, since we work with large images (> 1GB). The programs we integrate with typically only read a part of the image, e.g. the embedded preview. The API does not offer a way to access selected blocks of a file (random access file).
- The File Provider learns about the file system content via
enumerators
. So everything that is inside a folder must be enumerated (listed) first. Otherwise it cannot be accessed. However, we cannot enumerate our VFS. Most of the content of our VFS is fully dynamic. It only exists when it is accessed by a client the first time. Such dynamic content also includes dynamic parameters like the client's locale or the size of a box where the image will be placed. Since we do not know those parameters in advance, we cannot enumerate the VFS's content in advance.
This means, an NSFileProviderReplicatedExtension
in its current state isn't a replacement for a "real" VFS and therefore cannot be used by us as a replacement for our current VFS KEXT.
My questions:
- Will Apple allow kernel extensions also in future versions of (Apple Silicon/M1 based) operating systems? Or is there at least a clear deadline?
- If not, what is Apple's officially suggested replacement for KEXT based VFS solutions?
- Will the API of an NSFileProviderReplicatedExtension be improved to behave like a "real" file system so that above mentioned flaws will no longer be an issue?
Many thanks for any answers or comments!
Best regards,
Michael
...ANSWER
Answered 2021-Jun-02 at 11:14Will Apple allow kernel extensions also in future versions of (Apple Silicon/M1 based) operating systems? Or is there at least a clear deadline?
Apple doesn't really give timelines, and they also occasionally break promises of support.
However, this sort of hard API deprecation and removal usually is done as part of a major release, so you will typically get deprecation notice for it at WWDC one year, users might start seeing deprecation notices when the .0 of the OS release ships at the earliest, and sometimes the .3 or .4 revision. Then you'll typically be told at the next WWDC that the API is blocked in the upcoming release, so by that point you should have implemented a replacement.
If not, what is Apple's officially suggested replacement for KEXT based VFS solutions?
As far as I'm aware, NSFileProviderReplicatedExtension
is currently the only one.
Will the API of an NSFileProviderReplicatedExtension be improved to behave like a "real" file system so that above mentioned flaws will no longer be an issue?
Other than via beta SDKs, Apple generally doesn't pre-announce future APIs.
My advice:
- File issues for each of the file provider shortcomings you are hitting using Feedback Assistant. (Radar)
- File an "enhancement request" feedback issue with Apple for a "real" file system API replacement for the VFS KPI.
- If your vfs kext is critical to your business/product, I suggest additionally asking Apple's DTS via a TSI what they recommend for your situation. Reference the feedback IDs of the issues filed, otherwise they will recommend that you file issues.
QUESTION
I'm trying to kernel debug a physical Macbook pro device.
When my setup contains a VM, between a host MacOS and guest MacOS, its working with no problem using lldb -o "kdp-remote "
my boot-args on my remote (to debug) Macbook are:
...ANSWER
Answered 2021-May-09 at 09:52Your hardware setup sounds fine. Note that you don't necessarily need a direct ethernet cable connection, you can use your normal office-/home-wide wired network, it's fine to have a switch (or even more than one) between debugger and target. The debugger machine can even be using wifi as long as it can reach the target's wired network connection that way, though it's not recommended. The Thunderbolt Ethernet interface need not be Apple branded, but its driver does need to include kernel debugging support. In practice, for example, I've successfully used the Ethernet port in a OWC brand Thunderbolt Dock as well. Using one of Apple's own adapters of course guarantees it will work.
If the boot-args
on your target machine are the same as what you used in the VM, that's probably where your problem is coming from. You should specify the device to be used for kernel debugging, using the kdp_match_name=
option. Use the ifconfig
command in the Terminal to work out which of the listed devices is your Thunderbolt ethernet adapter (enX
), possibly based on the IP address. en0
is typically wifi in Mac laptops, so you're usually looking for X > 0.
So you'll end up with something like kdp_match_name=en1
added to your boot-args
. Make sure to reboot the machine cleanly before attempting a debugging session after updating the boot-args
setting.
A few more comments:
kext-dev-mode=1
This option no longer has any effect. It only existed in OS X 10.10. You can remove it.
I didn't find the exact KDK version, but I don't think it should be the problem here
Having a KDK version that doesn't match the target's exact kernel binary UUID will not prevent a connection, but it will prevent you from doing any meaningful debugging as the memory layout of threads etc. will not be available.
My debugger is Big Sur, and my debuggee is Catalina
If you ever run Big Sur on your target, make sure to add wdt=-1
to your boot-args
or the hung/crashed machine will reboot before you get a chance to connect with the debugger.
QUESTION
I tried to load kext module on M1 machine running 11.4 Beta (20F5046g) Big Sur and encounter some error messages on binding at kext module loading.
Accessing kernel symbol exported from Apple kext modulesFirst, to access the kernel functions exported from apple's kext module, com.apple.kpi.unsupported, I used the below extern declaration.
...ANSWER
Answered 2021-Apr-26 at 11:52I have just checked, and the crucial detail appears to be that you are trying to access this function on arm64/aarch64. As it turns out, it's exported in the "unsupported" KPI for x86_64, but not on arm64:
There's no straightforward way of accessing unexported symbols. If you know the offset of a symbol in the exact version of the running kernel, you should be able to compute the address by offsetting from a known function address; at least, this worked on x86-64. arm64 may require extra effort due to PAC (pointer authentication).
As this circumvents Apple's policies, I don't recommend using this type of technique in a shipping product.
QUESTION
Since Mac OS 11 Big Sur release Apple allows installation of kext drivers in the Recovery mode only. It also prohibits installation of kext drivers from Apple store. Which I guess is the end of macFuse, at least for virtual/cloud file systems. What would be the migration path and how to build virtual file systems for Mac OS 11+, in particular for document management and cloud storage, similar to OneDrive, DropBox, etc.
I can also guess that a similar issue may appear on Windows too. I can imagine that Microsoft will follow Apple's path and will prohibit file system drivers and filters on Windows for these purposes in future releases. Any hint for future migration if such a situation happens would be appreciated.
...ANSWER
Answered 2021-Feb-25 at 14:30Since macOS 11, Apple has updated documentation of the File Provider API which can be used to sync files between client and server and may serve as a replacement for file system drivers. Until this day Apple has not officially announced that functionality on macOS. The API is similar to the File Provider API that Apple has provided for iOS 11 some time ago but still it has some differences in mostly how main FileProvider class extension works and which abilities it has. There is no examples at this moment that I’ve seen but it looks like this functionality works at least on basic level. Based on what people say on the forums.
On Windows, Microsoft has introduced the Cloud Storage Provider (Cloud Sync Engine) API for Windows 10 in the year 2018 (Windows Creators update). It is used in One Drive for Windows. Here are some examples on GitHub in C++ and in C#.
QUESTION
So, I've been racking my brain against the wall for the last 6 hours trying to get this to work and I'm still at a loss..
I'm trying to install a kext on Big Sur from this repo, https://github.com/SimulPiscator/vpcm, and when I try and move the compiled kext to /System/Library/Extensions
I keep getting 'Read-only file system' error..
- I have disabled SIP
- Tried enabling root user
- Added myself to the 'wheel' group
- Reduced security level in security utility
- Tried changing permissions on the
/System
dir, keeps telling me I don't have permission.
I feel like I'm missing something obvious... Every article I've seen online tells me to put the kext in that directory and run kextload.. But how the heck do I get write permissions to that directory??
...ANSWER
Answered 2020-Nov-22 at 05:03So, I'm not sure if this is what is supposed to happen or not, but placing the kext in /Library/Extensions
instead of /System/Library/Extensions
worked.
I'm not sure if this is the correct thing to do but since it works, I'm not complaining.
Community Discussions, Code Snippets contain sources that include Stack Exchange Network
Vulnerabilities
No vulnerabilities reported
Install kext
Support
Reuse Trending Solutions
Find, review, and download reusable Libraries, Code Snippets, Cloud APIs from over 650 million Knowledge Items
Find more librariesStay Updated
Subscribe to our newsletter for trending solutions and developer bootcamps
Share this Page