Hi Michael,

Yes, this is a trade-off but I think it makes sense for our use case.

- Setting the pages no-access helps discover use-after-free bugs in V8. For
our purposes, though, this isn't a good trade-off, as we've never actually
seen such a bug on our end, but we are suffering a lot from the mmap
contention. So I'm comfortable forgoing that debugging aid.

- For a hijacked process, would this actually be that useful to an
attacker? If an attacker can write arbitrary memory, I imagine they would
prefer to target pages that are still active, rather than ones that have
been freed and zeroed. Or, are you saying there is likely a class of
security bugs that involve attackers being able to write to recently-freed
addresses? If so that's certainly worth thinking about.

-Kenton

On Mon, Aug 8, 2022 at 9:18 AM Michael Lippautz <mlippa...@chromium.org>
wrote:

> madvise(MADV_DONTNEED) and mprotect(kNoAccess) have different guarantees
> on what happens if you try to access that memory again (immediately). This
> is relevant when assuming that processes are hijacked and/or for debugging.
>
> Depending on your security model with running multiple isolates in the
> same process, such differences can be relevant though.
>
> -Michael
>
> On Mon, Aug 8, 2022 at 3:56 PM 'Kenton Varda' via v8-dev <
> v8-dev@googlegroups.com> wrote:
>
>> Thanks for the tips!
>>
>> I did some investigating and found that it doesn't look like JIT is a
>> major driver here. Instead, it seems to be regular old memory allocation
>> and deallocation. I think I can reduce the number of mmap ops considerably
>> with a custom PageAllocator that batches operations and eliminates
>> redundant ones (e.g. freeing some pages and then immediately allocating
>> them again, or freeing pages on isolate shutdown that would be freed
>> together with the whole pointer cage anyway).
>>
>> We also noticed that freeing pages does two operations:
>> mprotect(kNoAccess) followed by madvise(MADV_DONTNEED). It seems like we
>> can get away with skipping the mprotect operation since V8 won't attempt to
>> access the pages anyway, and the madvise operation is what actually frees
>> the memory. This change alone looks like it may reduce mmap operations by
>> ~30%-40%.
>>
>> -Kenton
>>
>> On Mon, Aug 8, 2022 at 5:23 AM Clemens Backes <cleme...@chromium.org>
>> wrote:
>>
>>> If you are also executing WebAssembly, then
>>> --no-wasm-write-protect-code-memory will further reduce the number of
>>> mprotect calls.
>>> We plan to turn off that feature anyway when we enable lazy compilation
>>> for Wasm, so you won't lose much if you already disable it now.
>>>
>>> On Mon, Aug 8, 2022 at 12:04 PM 'Hannes Payer' via v8-dev <
>>> v8-dev@googlegroups.com> wrote:
>>>
>>>> Hi Kenton,
>>>>
>>>> You can turn off the write protection for code memory with
>>>> --nowrite_protect_code_memory. The security benefits of this feature are
>>>> quite small.
>>>>
>>>> -Hannes
>>>>
>>>> On Fri, Aug 5, 2022 at 4:44 PM 'Kenton Varda' via v8-dev <
>>>> v8-dev@googlegroups.com> wrote:
>>>>
>>>>> Hi v8-dev,
>>>>>
>>>>> In Cloudflare Workers, where we often have thousands of isolates
>>>>> running across many threads in one process, we're running into issues with
>>>>> contention on the process's mmap_lock / mmap_sem in the Linux kernel. It
>>>>> appears V8 does a very large number of mmap/munmap/mprotect/page fault
>>>>> operations and in the right circumstances this is enough to bog down the
>>>>> lock.
>>>>>
>>>>> Before diving deep into the code I wanted to check if anyone has any
>>>>> thoughts, off the top of your heads, on how we could reduce the mmap usage
>>>>> in V8. Is there any easy knob to turn? Good places to look for
>>>>> optimizations in the code?
>>>>>
>>>>> Assuming there isn't an easy answer, one idea suggested to me by a
>>>>> kernel developer friend is: Instead of using mprotect() to swap pages
>>>>> between write and execute mode while JITing, what if the pages were mapped
>>>>> from a memfd in read-execute mode, and writes were performed by writing to
>>>>> a separate buffer and then doing a pwrite() on the memfd? Does that sound
>>>>> worth exploring? (I'm suggesting this with very little understanding of 
>>>>> how
>>>>> JIT works in V8; apologies if it's an obviously bad idea.)
>>>>>
>>>>> Thanks for any thoughts!
>>>>>
>>>>> -Kenton
>>>>>
>>>>> --
>>>>> --
>>>>> v8-dev mailing list
>>>>> v8-dev@googlegroups.com
>>>>> http://groups.google.com/group/v8-dev
>>>>> ---
>>>>> You received this message because you are subscribed to the Google
>>>>> Groups "v8-dev" group.
>>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>>> an email to v8-dev+unsubscr...@googlegroups.com.
>>>>> To view this discussion on the web visit
>>>>> https://groups.google.com/d/msgid/v8-dev/109e3dbe-edbd-4aeb-a30a-24b932939becn%40googlegroups.com
>>>>> <https://groups.google.com/d/msgid/v8-dev/109e3dbe-edbd-4aeb-a30a-24b932939becn%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>> .
>>>>>
>>>>
>>>>
>>>> --
>>>>
>>>>
>>>> Hannes Payer |  V8 |  Google Germany GmbH |  Erika-Mann Str. 33, 80636
>>>> München
>>>>
>>>> Geschäftsführer: Paul Manicle, Liana Sebastian
>>>>
>>>> Registergericht und -nummer: Hamburg, HRB 86891
>>>>
>>>> Sitz der Gesellschaft: Hamburg
>>>>
>>>> Diese E-Mail ist vertraulich. Falls Sie diese fälschlicherweise
>>>> erhalten haben sollten, leiten Sie diese bitte nicht an jemand anderes
>>>> weiter, löschen Sie alle Kopien und Anhänge davon und lassen Sie mich bitte
>>>> wissen, dass die E-Mail an die falsche Person gesendet wurde.
>>>>
>>>>
>>>>
>>>> This e-mail is confidential. If you received this communication by
>>>> mistake, please don't forward it to anyone else, please erase all copies
>>>> and attachments, and please let me know that it has gone to the wrong
>>>> person.
>>>>
>>>> --
>>>> --
>>>> v8-dev mailing list
>>>> v8-dev@googlegroups.com
>>>> http://groups.google.com/group/v8-dev
>>>> ---
>>>> You received this message because you are subscribed to the Google
>>>> Groups "v8-dev" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>> an email to v8-dev+unsubscr...@googlegroups.com.
>>>> To view this discussion on the web visit
>>>> https://groups.google.com/d/msgid/v8-dev/CAKEgpyGJyiVCDNn2BN4TPpYqpxZFEGqh-JZb0oURSC2KnsiYAw%40mail.gmail.com
>>>> <https://groups.google.com/d/msgid/v8-dev/CAKEgpyGJyiVCDNn2BN4TPpYqpxZFEGqh-JZb0oURSC2KnsiYAw%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>>> .
>>>>
>>>
>>>
>>> --
>>>
>>> Clemens Backes
>>>
>>> Software Engineer
>>>
>>> cleme...@google.com
>>>
>>> Google Germany GmbH
>>>
>>> Erika-Mann-Straße 33
>>>
>>> 80636 München
>>>
>>> Geschäftsführer: Paul Manicle, Liana Sebastian
>>>
>>> Registergericht und -nummer: Hamburg, HRB 86891
>>>
>>> Sitz der Gesellschaft: Hamburg
>>>
>>> Diese E-Mail ist vertraulich. Falls sie diese fälschlicherweise erhalten
>>> haben sollten, leiten Sie diese bitte nicht an jemand anderes weiter,
>>> löschen Sie alle Kopien und Anhänge davon und lassen Sie mich bitte wissen,
>>> dass die E-Mail an die falsche Person gesendet wurde.
>>>
>>>
>>> This e-mail is confidential. If you received this communication by
>>> mistake, please don't forward it to anyone else, please erase all copies
>>> and attachments, and please let me know that it has gone to the wrong
>>> person.
>>>
>>>
>>> --
>>> --
>>> v8-dev mailing list
>>> v8-dev@googlegroups.com
>>> http://groups.google.com/group/v8-dev
>>> ---
>>> You received this message because you are subscribed to a topic in the
>>> Google Groups "v8-dev" group.
>>> To unsubscribe from this topic, visit
>>> https://groups.google.com/d/topic/v8-dev/OvqzZHemtDI/unsubscribe.
>>> To unsubscribe from this group and all its topics, send an email to
>>> v8-dev+unsubscr...@googlegroups.com.
>>> To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/v8-dev/CAGO%3DqhCXJLfy9DMJ_Wh1Bcs1AS%3DiBjRKfTr0K60O-%3D6QQpxBmw%40mail.gmail.com
>>> <https://groups.google.com/d/msgid/v8-dev/CAGO%3DqhCXJLfy9DMJ_Wh1Bcs1AS%3DiBjRKfTr0K60O-%3D6QQpxBmw%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>> --
>> --
>> v8-dev mailing list
>> v8-dev@googlegroups.com
>> http://groups.google.com/group/v8-dev
>> ---
>> You received this message because you are subscribed to the Google Groups
>> "v8-dev" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to v8-dev+unsubscr...@googlegroups.com.
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/v8-dev/CAJouXQn16VWxhk1%3Dbzg_aSThX1uHmCQHEYTAsBTrWiSAGY199w%40mail.gmail.com
>> <https://groups.google.com/d/msgid/v8-dev/CAJouXQn16VWxhk1%3Dbzg_aSThX1uHmCQHEYTAsBTrWiSAGY199w%40mail.gmail.com?utm_medium=email&utm_source=footer>
>> .
>>
> --
> --
> v8-dev mailing list
> v8-dev@googlegroups.com
> http://groups.google.com/group/v8-dev
> ---
> You received this message because you are subscribed to a topic in the
> Google Groups "v8-dev" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/v8-dev/OvqzZHemtDI/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to
> v8-dev+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/v8-dev/CAH%2BmL5CnFw8bZegB2E0iL1Ohc83Zvh6YQ%2Bf8k1Uc8z9aB2oOeA%40mail.gmail.com
> <https://groups.google.com/d/msgid/v8-dev/CAH%2BmL5CnFw8bZegB2E0iL1Ohc83Zvh6YQ%2Bf8k1Uc8z9aB2oOeA%40mail.gmail.com?utm_medium=email&utm_source=footer>
> .
>

-- 
-- 
v8-dev mailing list
v8-dev@googlegroups.com
http://groups.google.com/group/v8-dev
--- 
You received this message because you are subscribed to the Google Groups 
"v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to v8-dev+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/v8-dev/CAJouXQkV1MStLfYSmx2Yr7D_hhiOYy5j6MgDDVEvzsZA985FpA%40mail.gmail.com.

Reply via email to