/* * netsniff-ng - the packet sniffing beast * Copyright 2009, 2010 Daniel Borkmann. * Copyright 2009, 2010 Emmanuel Roullit. * Subject to the GPL, version 2. */ #ifndef XSYS_H #define XSYS_H #define _GNU_SOURCE #include #include #include #include #include #include #include #include #include #include #include #include #include #include "built_in.h" extern int af_socket(int af); extern int pf_socket(void); extern int wireless_sigqual(const char *ifname, struct iw_statistics *stats); extern int wireless_rangemax_sigqual(const char *ifname); extern u32 wireless_bitrate(const char *ifname); extern u32 ethtool_bitrate(const char *ifname); extern u32 device_bitrate(const char *ifname); extern int ethtool_drvinf(const char *ifname, struct ethtool_drvinfo *drvinf); extern int ethtool_link(const char *ifname); extern int device_mtu(const char *ifname); extern int device_address(const char *ifname, int af, struct sockaddr_storage *ss); extern int device_irq_number(const char *ifname); extern int device_set_irq_affinity_list(int irq, unsigned long from, unsigned long to); extern int device_bind_irq_to_cpu(int irq, int cpu); extern void sock_print_net_stats(int sock, unsigned long skipped); extern int device_ifindex(const char *ifname); extern short device_get_flags(const char *ifname); extern void device_set_flags(const char *ifname, const short flags); extern void drop_privileges(bool enforce, uid_t uid, gid_t gid); extern void xlockme(void); extern void xunlockme(void); extern int set_nonblocking(int fd); extern int set_nonblocking_sloppy(int fd); extern int set_reuseaddr(int fd); extern void set_sock_prio(int fd, int prio); extern void set_tcp_cork(int fd); extern void set_tcp_uncork(int fd); extern void set_udp_cork(int fd); extern void set_udp_uncork(int fd); extern void set_sock_cork(int fd, int udp); extern void set_sock_uncork(int fd, int udp); extern void set_tcp_nodelay(int fd); extern void set_socket_keepalive(int fd); extern int set_ipv6_only(int fd); extern void set_mtu_disc_dont(int fd); extern int get_system_socket_mem(int which); extern void set_system_socket_mem(int which, int val); extern void register_signal(int signal, void (*handler)(int)); extern void register_signal_f(int signal, void (*handler)(int), int flags); extern short enter_promiscuous_mode(char *ifname); extern void leave_promiscuous_mode(char *ifname, short oldflags); extern int device_up_and_running(char *ifname); extern void set_epoll_descriptor(int fd_epoll, int action, int fd_toadd, int events); extern int set_epoll_descriptor2(int fd_epoll, int action, int fd_toadd, int events); extern void cpu_affinity(int cpu); extern int set_cpu_affinity(char *str, int inverted); extern int set_proc_prio(int prio); extern int set_sched_status(int policy, int priority); extern void ioprio_print(void); extern void set_ioprio_rt(void); extern void set_ioprio_be(void); extern size_t strlcpy(char *dest, const char *src, size_t size); extern int slprintf(char *dst, size_t size, const char *fmt, ...) __check_format_printf(3, 4); extern int slprintf_nocheck(char *dst, size_t size, const char *fmt, ...); extern noinline void *xmemset(void *s, int c, size_t n); extern char *strtrim_right(char *p, char c); extern int get_default_sched_policy(void); extern int get_default_sched_prio(void); extern int get_number_cpus(void); extern int get_number_cpus_online(void); extern int get_default_proc_prio(void); extern void set_system_socket_memory(int *vals, size_t len); extern void reset_system_socket_memory(int *vals, size_t len); extern void set_itimer_interval_value(struct itimerval *itimer, unsigned long sec, unsigned long usec); #endif /* XSYS_H */ value='25'>25space:mode:
authorArd Biesheuvel <ard.biesheuvel@linaro.org>2017-02-01 17:45:02 +0000
committerIngo Molnar <mingo@kernel.org>2017-02-01 21:17:49 +0100
commitc8f325a59cfc718d13a50fbc746ed9b415c25e92 (patch)
treed53fbdac9d0781e39a13b2ac6b2bd258cf3b4140 /tools/accounting/Makefile
parentbf29bddf0417a4783da3b24e8c9e017ac649326f (diff)
efi/fdt: Avoid FDT manipulation after ExitBootServices()
Some AArch64 UEFI implementations disable the MMU in ExitBootServices(), after which unaligned accesses to RAM are no longer supported. Commit: abfb7b686a3e ("efi/libstub/arm*: Pass latest memory map to the kernel") fixed an issue in the memory map handling of the stub FDT code, but inadvertently created an issue with such firmware, by moving some of the FDT manipulation to after the invocation of ExitBootServices(). Given that the stub's libfdt implementation uses the ordinary, accelerated string functions, which rely on hardware handling of unaligned accesses, manipulating the FDT with the MMU off may result in alignment faults. So fix the situation by moving the update_fdt_memmap() call into the callback function invoked by efi_exit_boot_services() right before it calls the ExitBootServices() UEFI service (which is arguably a better place for it anyway) Note that disabling the MMU in ExitBootServices() is not compliant with the UEFI spec, and carries great risk due to the fact that switching from cached to uncached memory accesses halfway through compiler generated code (i.e., involving a stack) can never be done in a way that is architecturally safe. Fixes: abfb7b686a3e ("efi/libstub/arm*: Pass latest memory map to the kernel") Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Tested-by: Riku Voipio <riku.voipio@linaro.org> Cc: <stable@vger.kernel.org> Cc: mark.rutland@arm.com Cc: linux-efi@vger.kernel.org Cc: matt@codeblueprint.co.uk Cc: leif.lindholm@linaro.org Cc: linux-arm-kernel@lists.infradead.org Link: http://lkml.kernel.org/r/1485971102-23330-2-git-send-email-ard.biesheuvel@linaro.org Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'tools/accounting/Makefile')