The sysctl related functions have type conversions integrated. So they provide the safer way of building a proc interface but more restricted. The type conversions are performed in a way that ensures that if incorrect types are passed (e.g. abc to proc_dointvec) then nothing is passed on at all. There is no error or warning though, so checking for invalid null data is left to the programmer. Note that the proc mirroring of sysctl table entries is a side effect of sysctl and not vice-versa. So one can disable the mirroring of any sysctl related setups by passing a NULL string in the procname field. Mode fields are valid for access via /proc as well as accessing via sysctl.