Re: Re: Kernel allocated memory not visible in L4Re virtual device despite correct physical RAM mapping

2026-05-14 Thread stephen.yang
Hi Adam,

Sorry for the delayed reply. You are exactly correct.

I have fully understood your solution of assigning multiple dataspaces to the 
VM and sharing one of them with the application, and I have already carried out 
some work on this basis.

My original intention was to try sharing just part of a single dataspace. And 
as verified in my earlier tests, this is indeed not feasible due to lack of 
such capability.

Thanks a lot for your valuable answer.

BR,
Stephen

 Replied Message 
| From | Adam Lackorzynski |
| Date | 05/04/2026 12:53 |
| To | stephen.yang |
| Cc | l4-hackers |
| Subject | Re: Kernel allocated memory not visible in L4Re virtual device 
despite correct physical RAM mapping |
Hi Stephen,

not sure my understanding is right, you want a small piece of the
guest's memory to be shared with another L4Re program? One way to do
this is to give the VM multiple dataspaces as its memory and share one
of those dataspaces with the application. uvmm supports giving multiple
dataspaces to a VM. Inside the VM the device tree tells where the memory
is. The driver inside the VM needs to be aware of that split and act
accordingly. Sharing just a part of a dataspace is indeed not possible
as no such functionality exists.


BR, Adam

On Sun Apr 26, 2026 at 13:18:05 +0800, stephen.yang wrote:
> Hi Adam,
> Your point is well taken. It is not feasible to disable forced mapping simply 
> based on this example.
> First, this address offset cannot be obtained directly, as no relevant 
> interface is provided. The same physical memory region perceived by the guest 
> and the host actually corresponds to different addresses on each side.
> Second, even if this offset were accessible, it would allow the virtual 
> device to access the entire system memory space, which poses significant 
> security risks to the system.
> Therefore, the approach shown in this example is not viable in practice. 
> Nevertheless, this discussion has deepened my understanding of the L4Re 
> framework and virtualization technologies.
> Thank you again for your reply.
>
>
> BR,Stephen
>
>
>
>
>
>
>
> At 2026-04-22 12:59:29, "Adam Lackorzynski"  wrote:
> >Hi Stephen,
> >
> >great it is working for you now. All the addresses in a virtualization
> >setup can be indeed confusing. With a virtual device using memory of the
> >VM, the virtual device needs to know about the guest physical mapping,
> >or better the mapping of the dataspace into the VMs guest physical
> >space. -i can make this a bit easier but it's really just a workaround.
> >
> >
> >Adam
> >
> >On Sat Apr 18, 2026 at 14:22:16 +0800, stephen.yang wrote:
> >> Hi Adam,
> >> Thank you very much for your reply and suggestions. I have tried making 
> >> changes according to your recommendations, but they did not seem to take 
> >> effect.
> >> However, I have discovered something interesting:  when disabling forced 
> >> mapping and using the method I mentioned in my previous email, the virtual 
> >> device is able to read the content that the kernel writes to that address 
> >> range.
> >> As described in the documentation£º
> >> -i, --ram-identity-mapping
> >> When set, the option forces the guest RAM to be mapped to its 
> >> corresponding host-physical addresses.
> >> Flag. True if provided.
> >>
> >>
> >> Additionally, I found that even with forced mapping enabled, the physical 
> >> address seen by the guest is different from that seen by the host, with an 
> >> offset between them.The host sees the address as 0x6620, while the 
> >> guest sees it as 0x6640.Based on the code mentioned earlier, this 
> >> issue can be resolved simply by accounting for this offset during the 
> >> mapping process.
> >> BR, Stephen
___
l4-hackers mailing list -- [email protected]
To unsubscribe send an email to [email protected]
___
l4-hackers mailing list -- [email protected]
To unsubscribe send an email to [email protected]


Re: Kernel allocated memory not visible in L4Re virtual device despite correct physical RAM mapping

2026-05-03 Thread Adam Lackorzynski
Hi Stephen,

not sure my understanding is right, you want a small piece of the
guest's memory to be shared with another L4Re program? One way to do
this is to give the VM multiple dataspaces as its memory and share one
of those dataspaces with the application. uvmm supports giving multiple
dataspaces to a VM. Inside the VM the device tree tells where the memory
is. The driver inside the VM needs to be aware of that split and act
accordingly. Sharing just a part of a dataspace is indeed not possible
as no such functionality exists.


BR, Adam

On Sun Apr 26, 2026 at 13:18:05 +0800, stephen.yang wrote:
> Hi Adam,
> Your point is well taken. It is not feasible to disable forced mapping simply 
> based on this example.
> First, this address offset cannot be obtained directly, as no relevant 
> interface is provided. The same physical memory region perceived by the guest 
> and the host actually corresponds to different addresses on each side.
> Second, even if this offset were accessible, it would allow the virtual 
> device to access the entire system memory space, which poses significant 
> security risks to the system.
> Therefore, the approach shown in this example is not viable in practice. 
> Nevertheless, this discussion has deepened my understanding of the L4Re 
> framework and virtualization technologies.
> Thank you again for your reply.
> 
> 
> BR,Stephen
> 
> 
> 
> 
> 
> 
> 
> At 2026-04-22 12:59:29, "Adam Lackorzynski"  wrote:
> >Hi Stephen,
> >
> >great it is working for you now. All the addresses in a virtualization
> >setup can be indeed confusing. With a virtual device using memory of the
> >VM, the virtual device needs to know about the guest physical mapping,
> >or better the mapping of the dataspace into the VMs guest physical
> >space. -i can make this a bit easier but it's really just a workaround.
> >
> >
> >Adam
> >
> >On Sat Apr 18, 2026 at 14:22:16 +0800, stephen.yang wrote:
> >> Hi Adam,
> >> Thank you very much for your reply and suggestions. I have tried making 
> >> changes according to your recommendations, but they did not seem to take 
> >> effect.
> >> However, I have discovered something interesting:  when disabling forced 
> >> mapping and using the method I mentioned in my previous email, the virtual 
> >> device is able to read the content that the kernel writes to that address 
> >> range. 
> >> As described in the documentation£º
> >> -i, --ram-identity-mapping
> >> When set, the option forces the guest RAM to be mapped to its 
> >> corresponding host-physical addresses.
> >> Flag. True if provided.
> >> 
> >> 
> >> Additionally, I found that even with forced mapping enabled, the physical 
> >> address seen by the guest is different from that seen by the host, with an 
> >> offset between them.The host sees the address as 0x6620, while the 
> >> guest sees it as 0x6640.Based on the code mentioned earlier, this 
> >> issue can be resolved simply by accounting for this offset during the 
> >> mapping process.
> >> BR, Stephen
___
l4-hackers mailing list -- [email protected]
To unsubscribe send an email to [email protected]


Re:Re: Kernel allocated memory not visible in L4Re virtual device despite correct physical RAM mapping

2026-05-03 Thread stephen.yang
Hi Adam,
Your point is well taken. It is not feasible to disable forced mapping simply 
based on this example.
First, this address offset cannot be obtained directly, as no relevant 
interface is provided. The same physical memory region perceived by the guest 
and the host actually corresponds to different addresses on each side.
Second, even if this offset were accessible, it would allow the virtual device 
to access the entire system memory space, which poses significant security 
risks to the system.
Therefore, the approach shown in this example is not viable in practice. 
Nevertheless, this discussion has deepened my understanding of the L4Re 
framework and virtualization technologies.
Thank you again for your reply.


BR,Stephen







At 2026-04-22 12:59:29, "Adam Lackorzynski"  wrote:
>Hi Stephen,
>
>great it is working for you now. All the addresses in a virtualization
>setup can be indeed confusing. With a virtual device using memory of the
>VM, the virtual device needs to know about the guest physical mapping,
>or better the mapping of the dataspace into the VMs guest physical
>space. -i can make this a bit easier but it's really just a workaround.
>
>
>Adam
>
>On Sat Apr 18, 2026 at 14:22:16 +0800, stephen.yang wrote:
>> Hi Adam,
>> Thank you very much for your reply and suggestions. I have tried making 
>> changes according to your recommendations, but they did not seem to take 
>> effect.
>> However, I have discovered something interesting:  when disabling forced 
>> mapping and using the method I mentioned in my previous email, the virtual 
>> device is able to read the content that the kernel writes to that address 
>> range. 
>> As described in the documentation£º
>> -i, --ram-identity-mapping
>> When set, the option forces the guest RAM to be mapped to its corresponding 
>> host-physical addresses.
>> Flag. True if provided.
>> 
>> 
>> Additionally, I found that even with forced mapping enabled, the physical 
>> address seen by the guest is different from that seen by the host, with an 
>> offset between them.The host sees the address as 0x6620, while the guest 
>> sees it as 0x6640.Based on the code mentioned earlier, this issue can be 
>> resolved simply by accounting for this offset during the mapping process.
>> BR, Stephen
___
l4-hackers mailing list -- [email protected]
To unsubscribe send an email to [email protected]


Re:Re: Kernel allocated memory not visible in L4Re virtual device despite correct physical RAM mapping

2026-04-21 Thread stephen.yang
Hi Adam,
Thank you very much for your reply and suggestions. I have tried making changes 
according to your recommendations, but they did not seem to take effect.
However, I have discovered something interesting:  when disabling forced 
mapping and using the method I mentioned in my previous email, the virtual 
device is able to read the content that the kernel writes to that address 
range. 
As described in the documentation:
-i, --ram-identity-mapping
When set, the option forces the guest RAM to be mapped to its corresponding 
host-physical addresses.
Flag. True if provided.


Additionally, I found that even with forced mapping enabled, the physical 
address seen by the guest is different from that seen by the host, with an 
offset between them.The host sees the address as 0x6620, while the guest 
sees it as 0x6640.Based on the code mentioned earlier, this issue can be 
resolved simply by accounting for this offset during the mapping process.
BR, Stephen___
l4-hackers mailing list -- [email protected]
To unsubscribe send an email to [email protected]


Re: Kernel allocated memory not visible in L4Re virtual device despite correct physical RAM mapping

2026-04-21 Thread Adam Lackorzynski
Hi Stephen,

great it is working for you now. All the addresses in a virtualization
setup can be indeed confusing. With a virtual device using memory of the
VM, the virtual device needs to know about the guest physical mapping,
or better the mapping of the dataspace into the VMs guest physical
space. -i can make this a bit easier but it's really just a workaround.


Adam

On Sat Apr 18, 2026 at 14:22:16 +0800, stephen.yang wrote:
> Hi Adam,
> Thank you very much for your reply and suggestions. I have tried making 
> changes according to your recommendations, but they did not seem to take 
> effect.
> However, I have discovered something interesting:  when disabling forced 
> mapping and using the method I mentioned in my previous email, the virtual 
> device is able to read the content that the kernel writes to that address 
> range. 
> As described in the documentation£º
> -i, --ram-identity-mapping
> When set, the option forces the guest RAM to be mapped to its corresponding 
> host-physical addresses.
> Flag. True if provided.
> 
> 
> Additionally, I found that even with forced mapping enabled, the physical 
> address seen by the guest is different from that seen by the host, with an 
> offset between them.The host sees the address as 0x6620, while the guest 
> sees it as 0x6640.Based on the code mentioned earlier, this issue can be 
> resolved simply by accounting for this offset during the mapping process.
> BR, Stephen
___
l4-hackers mailing list -- [email protected]
To unsubscribe send an email to [email protected]


Re: Kernel allocated memory not visible in L4Re virtual device despite correct physical RAM mapping

2026-04-15 Thread Adam Lackorzynski
Hi Stephen,

the memory in Linux is mapped cached, while in your L4Re side, you
mapped it uncached. Did you try mapping it cached on the L4Re side?
Or you do a cache clean on the str string in Linux.


BR, Adam

On Mon Apr 13, 2026 at 14:53:00 +0800, stephen.yang wrote:
> Hi l4-hackers,
>  I am trying to pass a kernel-allocated memory buffer to a virtual device, 
> but I am running into an issue. I would appreciate any help or suggestions.  
> 
> 
> 1.Kernel side(driver)
>  In my platform driver, I allocate memory using devm_kzalloc, write a string 
> into it, and pass its physical address to the device via an MMIO register:  
> ¡­¡­
> void* buf = devm_kzalloc(&pdev->dev, 0x200, GFP_KERNEL);
> if (!buf)
> return -ENOMEM;
> phys_addr_t pa = virt_to_phys(buf);
> char *str = "hi stephen";
> memcpy(buf, str, strlen(str) + 1);
> wmb();
> writeq((u64)pa, hb->base + 0x00);
> ¡­¡­
> 
> 
>  My understanding is: allocate kernel memory ¡ú write data ¡ú pass physical 
> address to the device.  
> 
> 
> 2. Memory layout
>  I observed that the allocated physical address falls within the RAM regions 
> configured via bootargs : 0x6620 - 0x6fff  
>  So my assumption was that if the virtual device maps this physical memory 
> region, it should be able to access the data written by the kernel.  
> 
> 
> 3. Virtual device side (L4Re)
> On the virtual device side, I map the physical memory using L4Re RM attach:
> void write(unsigned reg, char /*size*/, l4_uint64_t value, unsigned)
> {
> if (reg == 0x00) {
> addr = value;
> 
> 
> auto d = L4Re::Env::env()->get_cap("lram");
> 
> 
> l4_addr_t vaddr;
> l4_addr_t base = 0x6620;
> l4_addr_t size = 0x09E0;
> int r = L4Re::Env::env()->rm()->attach( &vaddr, size, 
> L4Re::Rm::F::Search_addr | L4Re::Rm::F::RW | 
>   L4Re::Rm::F::Cache_uncached,
> L4::Ipc::make_cap_rw(d),
> 0,
> L4_PAGESHIFT);
> if (r) {
> printf("can't attach hb memory\n");
> return;
> }
> char *dst = reinterpret_cast(vaddr + (addr - base));
> for (int i = 0; i < 20; i++) {
> printf("%02x ", (unsigned char)dst[i]);
> }
> printf("\n");
> printf("get msg for guest: %s\n", dst);
> }
> }
> 
> 
> 4.Problem
> However, I cannot read the string written by the kernel. The memory content I 
> get appears to be uninitialized or unrelated data.
> 
> 
> 5.Question
> I can confirm that the lram dataspace capability does correctly correspond to 
> the physical memory region 0x6620 - 0x6fff, 
> and this region is valid and usable RAM on the system. 
> 
> 
>  I am unsure where the issue lies:  
> (1) Is this approach (kernel allocation ¡ú pass physical address ¡ú direct 
> mapping in virtual device) actually valid?
> (2)  Could this be a cache coherence / DMA issue?
> (3)  Or is there something incorrect in my L4Re RM attach usage?
> 
> 
>  Any insights would be greatly appreciated.  

> ___
> l4-hackers mailing list -- [email protected]
> To unsubscribe send an email to [email protected]
___
l4-hackers mailing list -- [email protected]
To unsubscribe send an email to [email protected]


Kernel allocated memory not visible in L4Re virtual device despite correct physical RAM mapping

2026-04-15 Thread stephen.yang
Hi l4-hackers,
 I am trying to pass a kernel-allocated memory buffer to a virtual device, but 
I am running into an issue. I would appreciate any help or suggestions.  


1.Kernel side(driver)
 In my platform driver, I allocate memory using devm_kzalloc, write a string 
into it, and pass its physical address to the device via an MMIO register:  
……
void* buf = devm_kzalloc(&pdev->dev, 0x200, GFP_KERNEL);
if (!buf)
return -ENOMEM;
phys_addr_t pa = virt_to_phys(buf);
char *str = "hi stephen";
memcpy(buf, str, strlen(str) + 1);
wmb();
writeq((u64)pa, hb->base + 0x00);
……


 My understanding is: allocate kernel memory → write data → pass physical 
address to the device.  


2. Memory layout
 I observed that the allocated physical address falls within the RAM regions 
configured via bootargs : 0x6620 - 0x6fff  
 So my assumption was that if the virtual device maps this physical memory 
region, it should be able to access the data written by the kernel.  


3. Virtual device side (L4Re)
On the virtual device side, I map the physical memory using L4Re RM attach:
void write(unsigned reg, char /*size*/, l4_uint64_t value, unsigned)
{
if (reg == 0x00) {
addr = value;


auto d = L4Re::Env::env()->get_cap("lram");


l4_addr_t vaddr;
l4_addr_t base = 0x6620;
l4_addr_t size = 0x09E0;
int r = L4Re::Env::env()->rm()->attach( &vaddr, size, 
L4Re::Rm::F::Search_addr | L4Re::Rm::F::RW | 
  L4Re::Rm::F::Cache_uncached,
L4::Ipc::make_cap_rw(d),
0,
L4_PAGESHIFT);
if (r) {
printf("can't attach hb memory\n");
return;
}
char *dst = reinterpret_cast(vaddr + (addr - base));
for (int i = 0; i < 20; i++) {
printf("%02x ", (unsigned char)dst[i]);
}
printf("\n");
printf("get msg for guest: %s\n", dst);
}
}


4.Problem
However, I cannot read the string written by the kernel. The memory content I 
get appears to be uninitialized or unrelated data.


5.Question
I can confirm that the lram dataspace capability does correctly correspond to 
the physical memory region 0x6620 - 0x6fff, 
and this region is valid and usable RAM on the system. 


 I am unsure where the issue lies:  
(1) Is this approach (kernel allocation → pass physical address → direct 
mapping in virtual device) actually valid?
(2)  Could this be a cache coherence / DMA issue?
(3)  Or is there something incorrect in my L4Re RM attach usage?


 Any insights would be greatly appreciated.  ___
l4-hackers mailing list -- [email protected]
To unsubscribe send an email to [email protected]