diff mbox series

[2/2] Mini-OS: keep a positive list of externally visible symbols

Message ID 20231101153551.11733-3-jgross@suse.com (mailing list archive)
State Superseded
Headers show
Series Mini-OS: hide mini-os internal symbols | expand

Commit Message

Jürgen Groß Nov. 1, 2023, 3:35 p.m. UTC
Add a mini-os.map file containing all global symbols that are allowed
to be referenced by an application or library. Hide all other symbols
of Mini-OS from being visible externally.

The symbols in mini-os.map have been obtained via building all defined
and not failing stubdoms (caml-stubdom doesn't build).

Signed-off-by: Juergen Gross <jgross@suse.com>
---
 Makefile    |   3 +-
 mini-os.map | 187 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 189 insertions(+), 1 deletion(-)
 create mode 100644 mini-os.map

Comments

Samuel Thibault Nov. 3, 2023, 2:09 a.m. UTC | #1
Hello,

Juergen Gross, le mer. 01 nov. 2023 16:35:51 +0100, a ecrit:
> The symbols in mini-os.map have been obtained via building all defined
> and not failing stubdoms (caml-stubdom doesn't build).
> 
> +++ b/mini-os.map
> @@ -0,0 +1,187 @@
> +# Mini-OS symbols being externally visible
> +# entry point
> +_start
> +# Mini-OS service functions
> +alloc_fd
> +alloc_file_type
> +alloc_pages
> +bind_virq

I believe we also want bind_pirq

> +block
> +console_print
> +create_thread

Also
exit_thread
msleep

> +do_map_frames
> +free_pages
> +get_file_from_fd
> +hypercall_page
> +event_queue
> +evtchn_alloc_unbound
> +evtchn_bind_interdomain
> +evtchn_get_peercontext
> +gntmap_fini
> +gntmap_init
> +gntmap_map_grant_refs
> +gntmap_munmap
> +gntmap_set_max_grants
> +map_frames_ex

I believe we also want
map_frame_rw
map_frame_virt
unmap_frames

> +mask_evtchn

I believe we also want
clear_evtchn

> +need_pgt
> +printk
> +schedule
> +stop_kernel
> +unbind_evtchn
> +unmask_evtchn
> +wake
> +xencons_ring_avail

Only this xencons_ function? It's very surprising being alone

> +xprintk
> +__local_irq_restore
> +__local_irq_save

I guess we also want

gnttab_alloc_and_grant
gnttab_grant_access
gnttab_grant_transfer
gnttab_end_transfer
gnttab_end_access
gnttabop_error

ioremap
ioremap_nocache
iounmap

> +__udivdi3
> +__udivmoddi4
> +__umoddi3

Please put those in a libgcc section.

> +# libc

There are quite a few more that we'll want here: at least all of the
string/stdio operations of include/lib.h include/posix/strings.h (for the case when we don't
have newlib's libc)

Also,

ioctl
shutdown
getpeername
recvfrom
closelog
vsyslog
err
errx
warn
warnx
verr
verrx
vwarn
vwarnx
getuid
geteuid
getgid
getegid
gethostname
nice
_ctype
malloc
realloc
free

> +accept
> +bind
> +chdir
> +clock_gettime
> +close
> +closedir
> +connect
> +do_exit
> +dup
> +dup2
> +execv
> +fcntl
> +fork
> +fstat64
> +fsync
> +ftruncate
> +getpagesize
> +getpid
> +getsockname
> +getsockopt
> +gettimeofday
> +htonl
> +htons
> +inet_aton
> +inet_ntoa
> +isatty
> +kill
> +link
> +listen
> +lockf
> +lseek64
> +mkdir
> +mmap64
> +munmap
> +nanosleep
> +ntohl
> +ntohs
> +open64
> +opendir
> +openlog
> +pipe
> +poll
> +posix_openpt
> +read
> +readdir
> +recv
> +rmdir
> +sbrk
> +select
> +select_read_flag
> +send
> +sendto
> +setsid
> +setsockopt
> +sigaction
> +sleep
> +socket
> +stat
> +sysconf
> +syslog
> +tcgetattr
> +tcsetattr

I believe we also want cfmakeraw

> +umask
> +unlink
> +usleep
> +waitpid
> +write
> +_exit
> +_fini
> +_init
> +___lock_acquire
> +___lock_acquire_recursive
> +___lock_init_recursive
> +___lock_release
> +___lock_release_recursive
> +# 9pfront driver
> +init_9pfront
> +# blkfront driver
> +blkfront_aio
> +blkfront_aio_poll
> +blkfront_aio_push_operation
> +blkfront_io
> +blkfront_open
> +blkfront_queue
> +blkfront_sync
> +init_blkfront
> +shutdown_blkfront
> +# fbfront driver
> +fbfront_open
> +fbfront_receive
> +fbfront_resize
> +fbfront_update
> +init_fbfront
> +shutdown_fbfront
> +# kbdfront driver
> +init_kbdfront
> +kbdfront_open
> +kbdfront_receive
> +shutdown_kbdfront
> +# netfront driver
> +init_netfront
> +netfront_receive
> +netfront_tap_open
> +netfront_xmit
> +networking_set_addr
> +shutdown_netfront

I believe we also want
netfront_get_netmask
netfront_get_gateway
suspend_netfront
resume_netfront
start_networking
stop_networking
networking_set_addr

> +# pcifront driver
> +pcifront_conf_read
> +pcifront_conf_write
> +pcifront_scan
> +shutdown_pcifront

I believe we also want
init_pcifront
pcifront_op
pcifront_enable_msi
pcifront_disable_msi
pcifront_enable_msix
pcifront_disable_msiX

> +# tpmback driver
> +init_tpmback
> +shutdown_tpmback
> +tpmback_get_opaque
> +tpmback_get_peercontext
> +tpmback_get_uuid
> +tpmback_req_any
> +tpmback_resp
> +tpmback_set_opaque

I believe we also want
tpmback_req
tpmback_wait_for_frontend_connect
tpmback_num_frontends

> +# tpmfront driver
> +init_tpmfront
> +shutdown_tpmfront
> +tpmfront_cmd
> +tpmfront_open

I believe we also want tpmfront_set_locality

> +# tpm_tis driver
> +init_tpm_tis
> +init_tpm2_tis
> +tpm_tis_open
> +tpm_tis_request_locality

I believe we also want tpm_tis_cmd

> +# xenbus driver
> +xenbus_ls
> +xenbus_read
> +xenbus_wait_for_watch
> +xenbus_watch_path_token
> +xenbus_unwatch_path_token

Also
xenbus_wait_for_watch_return
xenbus_wait_for_value
xenbus_wait_for_state_change
xenbus_switch_state
xenbus_write
xenbus_msg_reply
xenbus_rm
xenbus_get_perms
xenbus_set_perms
xenbus_transaction_start
xenbus_transaction_end
xenbus_read_integer
xenbus_read_uuid
xenbus_printf
xenbus_get_self_id

> +xs_daemon_open
> +xs_directory
> +xs_fileno
> +xs_get_domain_path
> +xs_read
> +xs_read_watch
> +xs_rm
> +xs_unwatch
> +xs_watch
> +xs_write
> -- 
> 2.35.3
>
Jürgen Groß Nov. 6, 2023, 8:42 a.m. UTC | #2
On 03.11.23 03:09, Samuel Thibault wrote:
> Hello,
> 
> Juergen Gross, le mer. 01 nov. 2023 16:35:51 +0100, a ecrit:
>> The symbols in mini-os.map have been obtained via building all defined
>> and not failing stubdoms (caml-stubdom doesn't build).
>>
>> +++ b/mini-os.map
>> @@ -0,0 +1,187 @@
>> +# Mini-OS symbols being externally visible
>> +# entry point
>> +_start
>> +# Mini-OS service functions
>> +alloc_fd
>> +alloc_file_type
>> +alloc_pages
>> +bind_virq
> 
> I believe we also want bind_pirq

In general: yes to all of your remarks (thanks for looking up the missing
symbols).

This was a first round to see whether the approach is fine. Your answer seems
to indicate that this is the case.

I'll expand the list as you requested in the next version.


Juergen
diff mbox series

Patch

diff --git a/Makefile b/Makefile
index 85c6db75..d4768110 100644
--- a/Makefile
+++ b/Makefile
@@ -164,8 +164,9 @@  endif
 $(OBJ_DIR)/arch/x86/minios-x86%.lds:  arch/x86/minios-x86.lds.S
 	$(CPP) $(ASFLAGS) -P $< -o $@
 
-$(OBJ_DIR)/$(TARGET)-kern.o: $(OBJS) arch_lib $(OBJ_DIR)/$(TARGET_ARCH_DIR)/minios-$(MINIOS_TARGET_ARCH).lds
+$(OBJ_DIR)/$(TARGET)-kern.o: $(OBJS) arch_lib $(OBJ_DIR)/$(TARGET_ARCH_DIR)/minios-$(MINIOS_TARGET_ARCH).lds mini-os.map
 	$(LD) -r $(LDFLAGS) $(HEAD_OBJ) $(OBJS) $(LDARCHLIB) -o $@
+	$(OBJCOPY) -w -G $(GLOBAL_PREFIX)* --keep-global-symbols=mini-os.map $@ $@
 
 $(OBJ_DIR)/$(TARGET): $(OBJ_DIR)/$(TARGET)-kern.o $(APP_O)
 	$(LD) -r $(LDFLAGS) $(OBJ_DIR)/$(TARGET)-kern.o $(APP_O) $(LDLIBS) -o $@.o
diff --git a/mini-os.map b/mini-os.map
new file mode 100644
index 00000000..b62806e1
--- /dev/null
+++ b/mini-os.map
@@ -0,0 +1,187 @@ 
+# Mini-OS symbols being externally visible
+# entry point
+_start
+# Mini-OS service functions
+alloc_fd
+alloc_file_type
+alloc_pages
+bind_virq
+block
+console_print
+create_thread
+do_map_frames
+free_pages
+get_file_from_fd
+hypercall_page
+event_queue
+evtchn_alloc_unbound
+evtchn_bind_interdomain
+evtchn_get_peercontext
+gntmap_fini
+gntmap_init
+gntmap_map_grant_refs
+gntmap_munmap
+gntmap_set_max_grants
+map_frames_ex
+mask_evtchn
+need_pgt
+printk
+schedule
+stop_kernel
+unbind_evtchn
+unmask_evtchn
+wake
+xencons_ring_avail
+xprintk
+__local_irq_restore
+__local_irq_save
+__udivdi3
+__udivmoddi4
+__umoddi3
+# libc
+accept
+bind
+chdir
+clock_gettime
+close
+closedir
+connect
+do_exit
+dup
+dup2
+execv
+fcntl
+fork
+fstat64
+fsync
+ftruncate
+getpagesize
+getpid
+getsockname
+getsockopt
+gettimeofday
+htonl
+htons
+inet_aton
+inet_ntoa
+isatty
+kill
+link
+listen
+lockf
+lseek64
+mkdir
+mmap64
+munmap
+nanosleep
+ntohl
+ntohs
+open64
+opendir
+openlog
+pipe
+poll
+posix_openpt
+read
+readdir
+recv
+rmdir
+sbrk
+select
+select_read_flag
+send
+sendto
+setsid
+setsockopt
+sigaction
+sleep
+socket
+stat
+sysconf
+syslog
+tcgetattr
+tcsetattr
+umask
+unlink
+usleep
+waitpid
+write
+_exit
+_fini
+_init
+___lock_acquire
+___lock_acquire_recursive
+___lock_init_recursive
+___lock_release
+___lock_release_recursive
+# 9pfront driver
+init_9pfront
+# blkfront driver
+blkfront_aio
+blkfront_aio_poll
+blkfront_aio_push_operation
+blkfront_io
+blkfront_open
+blkfront_queue
+blkfront_sync
+init_blkfront
+shutdown_blkfront
+# fbfront driver
+fbfront_open
+fbfront_receive
+fbfront_resize
+fbfront_update
+init_fbfront
+shutdown_fbfront
+# kbdfront driver
+init_kbdfront
+kbdfront_open
+kbdfront_receive
+shutdown_kbdfront
+# netfront driver
+init_netfront
+netfront_receive
+netfront_tap_open
+netfront_xmit
+networking_set_addr
+shutdown_netfront
+# pcifront driver
+pcifront_conf_read
+pcifront_conf_write
+pcifront_scan
+shutdown_pcifront
+# tpmback driver
+init_tpmback
+shutdown_tpmback
+tpmback_get_opaque
+tpmback_get_peercontext
+tpmback_get_uuid
+tpmback_req_any
+tpmback_resp
+tpmback_set_opaque
+# tpmfront driver
+init_tpmfront
+shutdown_tpmfront
+tpmfront_cmd
+tpmfront_open
+# tpm_tis driver
+init_tpm_tis
+init_tpm2_tis
+tpm_tis_open
+tpm_tis_request_locality
+# xenbus driver
+xenbus_ls
+xenbus_read
+xenbus_wait_for_watch
+xenbus_watch_path_token
+xenbus_unwatch_path_token
+xs_daemon_open
+xs_directory
+xs_fileno
+xs_get_domain_path
+xs_read
+xs_read_watch
+xs_rm
+xs_unwatch
+xs_watch
+xs_write