1
0
mirror of https://git.FreeBSD.org/src.git synced 2025-01-21 15:45:02 +00:00
freebsd/sys/kern
Andre Oppermann f729ede69e Pad m_hdr on 32bit architectures to to prevent alignment and padding
problems with the way MLEN, MHLEN, and struct mbuf are set up.

CTASSERT's are provided to detect such issues at compile time in the
future.

The #define MLEN and MHLEN calculation do not take actual compiler-
induced alignment and padding inside the complete struct mbuf into
account.  Accordingly appropriate attention is required when changing
members of struct mbuf.

Ideally one would calculate MLEN as (MSIZE - sizeof(((struct mbuf *)0)->m_hdr)
but that doesn't work as the compiler refuses to operate on an as of
yet incomplete structure.

In particular ARM 32bit has more strict alignment requirements which
caused 4 bytes of padding between m_hdr and pkthdr in struct mbuf
because of the 64bit members in pkthdr.  This wasn't picked up by MLEN
and MHLEN causing an overflow of the mbuf provided data storage by
overestimating its size.

I386 didn't show this problem because it handles unaligned access just
fine, albeit at a small performance penalty.

On 64bit architectures the struct mbuf layout is 64bit aligned in all
places.

Reported by:	Thomas Skibo <ThomasSkibo-at-sbcglobal-dot-net>
Tested by:	tuexen, ian, Thomas Skibo (extended patch)
Sponsored by:	The FreeBSD Foundation
2013-08-27 20:52:02 +00:00
..
bus_if.m Add a BUS_CHILD_DELETED() method that a bus can hook to allow it to cleanup 2012-08-21 18:13:09 +00:00
capabilities.conf Add pipe2() system call. 2013-05-01 22:42:42 +00:00
clock_if.m
cpufreq_if.m
device_if.m
dtio_kdtrace.c Change the module name for the I/O provider to "kernel" from 2012-09-25 19:16:28 +00:00
genassym.sh
imgact_aout.c
imgact_elf32.c
imgact_elf64.c
imgact_elf.c Revert r253939: 2013-08-05 08:55:35 +00:00
imgact_gzip.c Replace kernel virtual address space allocation with vmem. This provides 2013-08-07 06:21:20 +00:00
imgact_shell.c
inflate.c
init_main.c Don't call sleepinit() from proc0_init(), make it a SYSINIT instead. 2013-08-09 23:13:52 +00:00
init_sysent.c aio_mlock() added: 2013-06-08 13:30:13 +00:00
kern_acct.c acct: create a special plimit object and set it for exiting processes 2013-06-30 19:08:06 +00:00
kern_alq.c The fix committed in r250951 replaced the reported panic with a deadlock... gold 2013-06-17 09:49:07 +00:00
kern_clock.c Correct a bug that prevented deadlkres from (almost) ever firing. 2013-06-28 15:55:30 +00:00
kern_clocksource.c - Make callout(9) tickless, relying on eventtimers(4) as backend for 2013-03-04 11:09:56 +00:00
kern_condvar.c MFcalloutng: 2013-03-04 12:20:48 +00:00
kern_conf.c Reject spaces and double quotation marks in device names. devctl(4) 2012-12-22 13:33:28 +00:00
kern_cons.c cngetc: use cpu_spinwait to ease the cncheckc loop a tiny bit 2012-10-06 19:50:23 +00:00
kern_context.c
kern_cpu.c
kern_cpuset.c Several improvements to rmlock(9). Many of these are based on patches 2013-06-25 18:44:15 +00:00
kern_ctf.c Remove the support for using non-mpsafe filesystem modules. 2012-10-22 17:50:54 +00:00
kern_descrip.c Make sendfile() a method in the struct fileops. Currently only 2013-08-15 07:54:31 +00:00
kern_dtrace.c
kern_environment.c r249408 and r249436 cause a NULL pointer dereference on the CUBIEBOARD 2013-04-16 22:09:08 +00:00
kern_et.c Fix incorrect assertion that caused panic when periodic-only timers used. 2013-03-13 06:42:01 +00:00
kern_event.c fix up some comments and a white space issue... 2013-08-26 18:53:19 +00:00
kern_exec.c Remove the deprecated VM_ALLOC_RETRY flag for the vm_page_grab(9). 2013-08-22 07:39:53 +00:00
kern_exit.c Specify SDT probe argument types in the probe definition itself rather than 2013-08-15 04:08:55 +00:00
kern_fail.c
kern_ffclock.c
kern_fork.c Specify SDT probe argument types in the probe definition itself rather than 2013-08-15 04:08:55 +00:00
kern_gzio.c Remove the support for using non-mpsafe filesystem modules. 2012-10-22 17:50:54 +00:00
kern_hhook.c Move hhook's per-vnet initialisation to an earlier SYSINIT SI_SUB stage to 2013-06-15 10:08:34 +00:00
kern_idle.c
kern_intr.c The change in r236456 (atomic_store_rel not locked) exposed a bug 2013-07-04 05:53:05 +00:00
kern_jail.c Allow tmpfs be mounted inside jail. 2013-08-23 22:52:20 +00:00
kern_khelp.c Cleanup and simplification in khelp_{register|deregister}_helper(). No 2013-06-15 06:45:17 +00:00
kern_kthread.c Do not use potentially stale thread in kthread_add() 2013-08-17 17:02:43 +00:00
kern_ktr.c ktr: correctly handle possible wrap-around in the boot buffer 2013-02-08 07:29:07 +00:00
kern_ktrace.c Remove the support for using non-mpsafe filesystem modules. 2012-10-22 17:50:54 +00:00
kern_linker.c Rename the kld_unload event handler to kld_unload_try, and add a new 2013-08-24 21:13:38 +00:00
kern_lock.c A few mostly cosmetic nits to aid in debugging: 2013-06-25 20:23:08 +00:00
kern_lockf.c
kern_lockstat.c
kern_loginclass.c
kern_malloc.c - Disable quantum caches on the kmem_arena. This can make fragmentation 2013-08-13 22:41:24 +00:00
kern_mbuf.c After r254779 "error" must always be present in mb_ctor_pack(), 2013-08-24 21:25:53 +00:00
kern_mib.c fix some fat-fingering in r246246 2013-02-02 14:19:50 +00:00
kern_module.c Fix a typo. 2012-08-22 20:01:57 +00:00
kern_mtxpool.c
kern_mutex.c Give mutex(9) the ability to recurse on a per-instance basis. 2013-08-09 11:24:29 +00:00
kern_ntptime.c rename scheduler->swapper and SI_SUB_RUN_SCHEDULER->SI_SUB_LAST 2013-07-24 09:45:31 +00:00
kern_osd.c
kern_physio.c Fix a printf format warning on 32-bit mips and powerpc. 2013-08-24 19:02:36 +00:00
kern_pmc.c
kern_poll.c Remove unsigned comparison < 0 2013-08-07 07:22:56 +00:00
kern_priv.c Make the comments a little more clear about PRIV_KMEM_*, explicitly 2013-07-06 00:10:52 +00:00
kern_proc.c Add the ability to display the default FIB number for a process to the 2013-08-26 23:48:21 +00:00
kern_prot.c Style fix 2012-11-14 10:33:12 +00:00
kern_racct.c Accessing td_state requires thread lock to be held. 2013-03-14 23:20:18 +00:00
kern_rangelock.c Change the queue of locks in kern_rangelock.c from holding lock requests in 2013-08-15 20:19:17 +00:00
kern_rctl.c Add CPU percentage limit enforcement to RCTL. The resouce name is "pcpu". 2012-10-26 16:01:08 +00:00
kern_resource.c Call sched_prio() to immediately change the priority of the thread in 2013-03-07 02:53:29 +00:00
kern_rmlock.c Fix build with INVARIANT_SUPPORT enabled but not INVARIANTS. 2013-07-08 21:17:20 +00:00
kern_rwlock.c A few mostly cosmetic nits to aid in debugging: 2013-06-25 20:23:08 +00:00
kern_sdt.c FreeBSD's DTrace implementation has a few problems with respect to handling 2013-08-13 03:10:39 +00:00
kern_sema.c
kern_sharedpage.c Remove the deprecated VM_ALLOC_RETRY flag for the vm_page_grab(9). 2013-08-22 07:39:53 +00:00
kern_shutdown.c Switch the vm_object mutex to be a rwlock. This will enable in the 2013-03-09 02:32:23 +00:00
kern_sig.c Specify SDT probe argument types in the probe definition itself rather than 2013-08-15 04:08:55 +00:00
kern_switch.c Add a comment on why inlining critical_enter() may not be a good idea 2012-12-09 04:54:22 +00:00
kern_sx.c A few mostly cosmetic nits to aid in debugging: 2013-06-25 20:23:08 +00:00
kern_synch.c Don't call sleepinit() from proc0_init(), make it a SYSINIT instead. 2013-08-09 23:13:52 +00:00
kern_syscalls.c
kern_sysctl.c Add a helpful message that can help point to why a sysctl tree removal failed 2013-08-09 01:04:44 +00:00
kern_tc.c - Make callout(9) tickless, relying on eventtimers(4) as backend for 2013-03-04 11:09:56 +00:00
kern_thr.c
kern_thread.c Another NFS SIGSTOP related fix: Ignore thread suspend requests due to 2013-03-21 14:06:27 +00:00
kern_time.c Implement compat32 wrappers for the ktimer_* syscalls. 2013-07-21 19:43:52 +00:00
kern_timeout.c Specify SDT probe argument types in the probe definition itself rather than 2013-08-15 04:08:55 +00:00
kern_umtx.c Fix two issues with the spin loops in the umtx(2) implementation. 2013-06-13 09:33:22 +00:00
kern_uuid.c Further restrict the MAC addresses that we use for UUID generation 2013-07-24 18:13:43 +00:00
kern_xxx.c
ksched.c
link_elf_obj.c Remove the support for using non-mpsafe filesystem modules. 2012-10-22 17:50:54 +00:00
link_elf.c Remove some code that has been commented out since it was added in 2000. 2013-08-24 21:00:39 +00:00
linker_if.m
Make.tags.inc - Trim an unused and bogus Makefile for mount_smbfs. 2013-06-28 21:00:08 +00:00
Makefile
makesyscalls.sh
md4c.c
md5c.c
p1003_1b.c
posix4_mib.c
sched_4bsd.c rename scheduler->swapper and SI_SUB_RUN_SCHEDULER->SI_SUB_LAST 2013-07-24 09:45:31 +00:00
sched_ule.c Point args[0] not at the thread that is ending but at the one that 2013-04-15 17:21:02 +00:00
serdev_if.m
stack_protector.c
subr_acl_nfs4.c
subr_acl_posix1e.c
subr_autoconf.c
subr_blist.c Remove reference to the rlist code from comments, and fix a typo visible 2013-02-05 20:08:33 +00:00
subr_bufring.c
subr_bus_dma.c Move an assertion to the right spot; only bus_dmamap_load_mbuf(9) 2013-06-01 11:42:47 +00:00
subr_bus.c Allow drivers to return BUS_PROBE_NOWILDCARD from their attach routine to 2013-08-08 19:30:49 +00:00
subr_busdma_bufalloc.c Replace kernel virtual address space allocation with vmem. This provides 2013-08-07 06:21:20 +00:00
subr_clock.c
subr_counter.c Revert r249590 and in case if mp_ncpus isn't initialized use MAXCPU. This 2013-07-23 11:16:40 +00:00
subr_devstat.c
subr_disk.c
subr_dummy_vdso_tc.c
subr_eventhandler.c
subr_fattime.c
subr_firmware.c
subr_hash.c
subr_hints.c Style fixes. 2012-09-04 23:16:55 +00:00
subr_kdb.c
subr_kobj.c
subr_lock.c Several improvements to rmlock(9). Many of these are based on patches 2013-06-25 18:44:15 +00:00
subr_log.c MFcalloutng (r244255 by mav, with minor changes): 2013-03-04 16:07:55 +00:00
subr_mbpool.c Give (*ext_free) an int return value allowing for very sophisticated 2013-08-25 10:57:09 +00:00
subr_mchain.c Mechanically substitute flags from historic mbuf allocator with 2012-12-05 08:04:20 +00:00
subr_module.c
subr_msgbuf.c
subr_param.c Implement the concept of the unmapped VMIO buffers, i.e. buffers which 2013-03-19 14:13:12 +00:00
subr_pcpu.c
subr_pctrie.c - Add a new general purpose path-compressed radix trie which can be used 2013-05-12 04:05:01 +00:00
subr_power.c
subr_prf.c
subr_prof.c
subr_rman.c
subr_rtc.c
subr_sbuf.c A library function shall not set errno to 0. 2013-05-16 18:13:10 +00:00
subr_scanf.c
subr_sglist.c
subr_sleepqueue.c Partially revert r195702. Deferring stops is now implemented via a set of 2013-03-18 17:23:58 +00:00
subr_smp.c - Correctly handle EWOULDBLOCK in quiesce_cpus 2012-12-19 20:08:06 +00:00
subr_stack.c
subr_syscall.c Fix build on ARM (and probably other platforms) 2012-12-28 06:52:53 +00:00
subr_taskqueue.c MFprojects/camlock r254460: 2013-08-24 14:41:49 +00:00
subr_trap.c Partially revert r195702. Deferring stops is now implemented via a set of 2013-03-18 17:23:58 +00:00
subr_turnstile.c Update the comment: we do show the backtrace of misbehaving thread. 2013-02-17 21:37:32 +00:00
subr_uio.c On all the architectures, avoid to preallocate the physical memory 2013-08-09 11:28:55 +00:00
subr_unit.c Correct double "the the" 2012-09-14 21:28:56 +00:00
subr_vmem.c Added sysctl to turn off calls to vmem_check(). 2013-08-20 11:06:56 +00:00
subr_witness.c The r254167 moved initialization of the sleepqueues before the witness 2013-08-10 21:42:14 +00:00
sys_capability.c Implement 32bit versions of the cap_ioctls_limit(2) and cap_ioctls_get(2) 2013-08-18 10:30:41 +00:00
sys_generic.c Help out gcc. clang understands. 2013-06-29 04:35:04 +00:00
sys_pipe.c Make sendfile() a method in the struct fileops. Currently only 2013-08-15 07:54:31 +00:00
sys_procdesc.c Restore the previous sendfile(2) behaviour on the block devices. 2013-08-16 14:22:20 +00:00
sys_process.c Revert r253939: 2013-08-05 08:55:35 +00:00
sys_socket.c Make sendfile() a method in the struct fileops. Currently only 2013-08-15 07:54:31 +00:00
syscalls.c aio_mlock() added: 2013-06-08 13:30:13 +00:00
syscalls.master Add new system call - aio_mlock(). The name speaks for itself. It allows 2013-06-08 13:27:57 +00:00
systrace_args.c aio_mlock() added: 2013-06-08 13:30:13 +00:00
sysv_ipc.c
sysv_msg.c
sysv_sem.c
sysv_shm.c Be more aggressive in using superpages in all mappings of objects: 2013-07-19 19:06:15 +00:00
tty_compat.c
tty_info.c
tty_inq.c
tty_outq.c
tty_pts.c Make sendfile() a method in the struct fileops. Currently only 2013-08-15 07:54:31 +00:00
tty_tty.c
tty_ttydisc.c Correct SIGTTIN handling. 2012-10-25 09:05:21 +00:00
tty.c Merge Capsicum overhaul: 2013-03-02 00:53:12 +00:00
uipc_accf.c
uipc_cow.c Give (*ext_free) an int return value allowing for very sophisticated 2013-08-25 10:57:09 +00:00
uipc_debug.c
uipc_domain.c - Implement two new system calls: 2013-03-02 21:11:30 +00:00
uipc_mbuf2.c Mechanically substitute flags from historic mbuf allocator with 2012-12-05 08:04:20 +00:00
uipc_mbuf.c Pad m_hdr on 32bit architectures to to prevent alignment and padding 2013-08-27 20:52:02 +00:00
uipc_mqueue.c Disallow opening a POSIX message queue for execute. 2013-08-18 13:27:04 +00:00
uipc_sem.c Make sendfile() a method in the struct fileops. Currently only 2013-08-15 07:54:31 +00:00
uipc_shm.c Remove the deprecated VM_ALLOC_RETRY flag for the vm_page_grab(9). 2013-08-22 07:39:53 +00:00
uipc_sockbuf.c When a previous call to sbsndptr() leaves sb->sb_sndptroff at the start of an 2013-06-19 03:08:01 +00:00
uipc_socket.c Use tvtohz() to convert a socket buffer timeout to a tick value rather 2013-08-23 13:47:41 +00:00
uipc_syscalls.c Give (*ext_free) an int return value allowing for very sophisticated 2013-08-25 10:57:09 +00:00
uipc_usrreq.c Fix receiving fd over unix socket broken in r247740. 2013-07-02 07:36:04 +00:00
vfs_acl.c Don't dereference null pointer should acl_alloc() be passed M_NOWAIT 2013-08-09 08:40:31 +00:00
vfs_aio.c Change the way that unmapped I/O capability is advertised. 2013-08-15 22:52:39 +00:00
vfs_bio.c Both cluster_rbuild() and cluster_wbuild() sometimes set the pages 2013-08-22 18:26:45 +00:00
vfs_cache.c namecache sdt: freebsd doesn't support structured characters yet 2013-07-09 08:58:34 +00:00
vfs_cluster.c When allocating a pbuf for the cluster write, do not sleep waiting 2013-08-27 01:31:12 +00:00
vfs_default.c - Convert the bufobj lock to rwlock. 2013-05-31 00:43:41 +00:00
vfs_export.c Further refine the handling of stop signals in the NFS client. The 2013-02-21 19:02:50 +00:00
vfs_extattr.c Use a shared lock for VOP_GETEXTATTR, as it is a read-like operation. 2013-03-30 15:09:04 +00:00
vfs_hash.c Add exported vfs_hash_index() function, which calculates the canonical 2013-01-14 05:41:40 +00:00
vfs_init.c Revert accidental commit. 2013-06-29 05:05:57 +00:00
vfs_lookup.c Do not override the ENOENT error for the empty path, or EFAULT errors 2013-08-05 19:42:03 +00:00
vfs_mount.c Add vfs_mounted and vfs_unmounted events so that components can be informed 2013-07-10 15:35:25 +00:00
vfs_mountroot.c Add a tunable for the default timeout. 2013-08-03 04:25:25 +00:00
vfs_subr.c In r114945 the line 'nmp = TAILQ_NEXT(mp, mnt_list);' was duplicated. 2013-08-17 14:13:45 +00:00
vfs_syscalls.c Make the seek a method of the struct fileops. 2013-08-21 17:36:01 +00:00
vfs_vnops.c Make the seek a method of the struct fileops. 2013-08-21 17:36:01 +00:00
vnode_if.src remove vop_lookup_pre and vop_lookup_post 2012-11-22 10:36:10 +00:00