Bug 252582

Summary: Linuxulator: epoll create drop user data
Product: Base System Reporter: shu <ankohuu>
Component: kernAssignee: freebsd-emulation (Nobody) <emulation>
Status: Closed FIXED    
Severity: Affects Some People CC: dchagin, emaste, trasz, wulf
Priority: ---    
Version: CURRENT   
Hardware: Any   
OS: Any   
Bug Depends on:    
Bug Blocks: 247219    
Attachments:
Description Flags
patch for epoll create
none
patch for linux epoll create
none
drop_epoll_data.patch
none
epoll test code none

Description shu 2021-01-11 16:11:03 UTC
Created attachment 221464 [details]
patch for epoll create

In function epoll_create_common calls epoll_fd_install when kern_kqueue success,
I guess this is to initialize the proc emuldata space.
But when epoll has allocated a descriptor equal to EPOLL_DEF_SZ, the above action will clear the user data of fd EPOLL_DEF_SZ.This should be an error.

static int
epoll_create_common(struct thread *td, int flags)
{
        int error;
 
        error = kern_kqueue(td, flags, NULL);
        if (error != 0)
                return (error);
 
        epoll_fd_install(td, EPOLL_DEF_SZ, 0);
 
        return (0);
}

In my scenario, the function epoll_fd_install will cause the electron gpu thread consumes a lot of cpu resources because the returned fd cannot be processed correctly.
My patch is in the attachment.
Comment 1 shu 2021-01-11 16:24:46 UTC
Created attachment 221465 [details]
patch for linux epoll create
Comment 2 Vladimir Kondratyev freebsd_committer freebsd_triage 2021-01-13 00:53:40 UTC
Created attachment 221517 [details]
drop_epoll_data.patch

Could you test this patch instead of your?
Comment 3 shu 2021-01-14 03:29:14 UTC
Created attachment 221549 [details]
epoll test code
Comment 4 shu 2021-01-14 03:30:19 UTC
Tested already, it works fine for me.
Test case is in the attachment.
Comment 5 Vladimir Kondratyev freebsd_committer freebsd_triage 2021-01-14 21:22:00 UTC
https://reviews.freebsd.org/D28169
Comment 6 Ed Maste freebsd_committer freebsd_triage 2021-02-08 01:40:06 UTC
Committed in b3c6fe663bb9
Comment 7 Dmitry Chagin freebsd_committer freebsd_triage 2022-06-22 10:05:30 UTC
merged to stable/13,
I don't plan to merge it to stable/12