Port-xen archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: Avoiding RWX segments in XEN3_DOM0/XEN3_DOMU kernels



On Sat, Oct 21, 2023 at 05:57:56PM +0200, Martin Husemann wrote:
> On Sat, Oct 21, 2023 at 05:37:01PM +0200, Manuel Bouyer wrote:
> > Doens't this ends up with bigger kernel images, with a hole between text,
> > rodata and data ? The hole would be a waste of ram.
> 
> There are 31 section headers, starting at offset 0x12037e0:
> 
> Section Headers:
>   [Nr] Name              Type             Address           Offset
>        Size              EntSize          Flags  Link  Info  Align
>   [ 0]                   NULL             0000000000000000  00000000
>        0000000000000000  0000000000000000           0     0     0
>   [ 1] .text             PROGBITS         ffffffff80200000  00001000
>        00000000009c8000  0000000000000000  AX       0     0     4096
>   [ 2] .rodata.hotpatch  PROGBITS         ffffffff80bc8000  009c9000
>        00000000000003f2  0000000000000000   A       0     0     1
>   [ 3] .rodata           PROGBITS         ffffffff80bc8400  009c9400
>        00000000003f5240  0000000000000000   A       0     0     64
>   [ 4] .eh_frame         PROGBITS         ffffffff80fbd640  00dbe640
>        000000000013e0e0  0000000000000000   A       0     0     8
>   [ 5] link_set_sdt[...] PROGBITS         ffffffff810fb720  00efc720
>        0000000000001930  0000000000000000   A       0     0     8
>   [ 6] link_set_sdt[...] PROGBITS         ffffffff810fd050  00efe050
>        00000000000008b0  0000000000000000   A       0     0     8
>   [ 7] link_set_modules  PROGBITS         ffffffff810fd900  00efe900
>        0000000000000838  0000000000000000   A       0     0     8
>   [ 8] link_set_evcnts   PROGBITS         ffffffff810fe138  00eff138
>        0000000000000138  0000000000000000   A       0     0     8
>   [ 9] link_set_sys[...] PROGBITS         ffffffff810fe270  00eff270
>        00000000000002c8  0000000000000000   A       0     0     8
>   [10] link_set_sdt[...] PROGBITS         ffffffff810fe538  00eff538
>        0000000000000030  0000000000000000   A       0     0     8
>   [11] link_set_acp[...] PROGBITS         ffffffff810fe568  00eff568
>        0000000000000010  0000000000000000   A       0     0     8
>   [12] link_set_domains  PROGBITS         ffffffff810fe578  00eff578
>        0000000000000058  0000000000000000   A       0     0     8
>   [13] link_set_iee[...] PROGBITS         ffffffff810fe5d0  00eff5d0
>        0000000000000020  0000000000000000   A       0     0     8
>   [14] link_set_ah_chips PROGBITS         ffffffff810fe5f0  00eff5f0
>        0000000000000038  0000000000000000   A       0     0     8
>   [15] link_set_ah_rfs   PROGBITS         ffffffff810fe628  00eff628
>        0000000000000038  0000000000000000   A       0     0     8
>   [16] link_set_dkw[...] PROGBITS         ffffffff810fe660  00eff660
>        0000000000000018  0000000000000000   A       0     0     8
>   [17] link_set_pro[...] PROGBITS         ffffffff810fe678  00eff678
>        0000000000000040  0000000000000000   A       0     0     8
>   [18] .data             PROGBITS         ffffffff810ff000  00f00000
>        000000000008efb8  0000000000000000  WA       0     0     64
>   [19] .data.cachel[...] PROGBITS         ffffffff8118dfc0  00f8efc0
>        000000000000ced8  0000000000000000  WA       0     0     64
>   [20] .data.read_mostly PROGBITS         ffffffff8119aec0  00f9bec0
>        00000000000012a8  0000000000000000  WA       0     0     32
>   [21] .bss              NOBITS           ffffffff8119d000  00f9d168
>        00000000001d7000  0000000000000000  WA       0     0     4096
>   [22] .note.netbsd[...] NOTE             ffffffff81374000  00f9d168
>        0000000000000018  0000000000000000           0     0     4
>   [23] .note.Xen         NOTE             ffffffff81374000  00f9d180
>        000000000000019c  0000000000000000           0     0     4
>   [24] .ident            PROGBITS         0000000000000000  00f9d31c
>        000000000001b592  0000000000000001  MS       0     0     1
>   [25] .comment          PROGBITS         0000000000000000  00fb88ae
>        0000000000000022  0000000000000001  MS       0     0     1
>   [26] .SUNW_ctf         PROGBITS         0000000000000000  00fb88d0
>        00000000000aacdb  0000000000000000           0     0     4
>   [27] .gnu_debuglink    PROGBITS         0000000000000000  010635ac
>        000000000000001c  0000000000000000           0     0     4
>   [28] .symtab           SYMTAB           0000000000000000  010635c8
>        00000000000f6120  0000000000000018          29   22739     8
>   [29] .strtab           STRTAB           0000000000000000  011596e8
>        00000000000a9f1e  0000000000000000           0     0     1
>   [30] .shstrtab         STRTAB           0000000000000000  01203606
>        00000000000001d4  0000000000000000           0     0     1
> Key to Flags:
>   W (write), A (alloc), X (execute), M (merge), S (strings), I (info),
>   L (link order), O (extra OS processing required), G (group), T (TLS),
>   C (compressed), x (unknown), o (OS specific), E (exclude),
>   D (mbind), l (large), p (processor specific)
> 
> 
> > Note that this won't change much things in practice: Xen loads this as a
> > single large blob mapped read/write, and the NetBSD bootstrap remaps
> > it RX, RO or RW based on __rodata_start and __data_start
> 
> How about putting it all in a RX segment then?

This could work; unless Xen decides to map everything R/O at startup


-- 
Manuel Bouyer <bouyer%antioche.eu.org@localhost>
     NetBSD: 26 ans d'experience feront toujours la difference
--


Home | Main Index | Thread Index | Old Index