Eric W. Biederman 7c60c48f58 sysctl: Improve the sysctl sanity checks
- Stop validating subdirectories now that we only register leaf tables

- Cleanup and improve the duplicate filename check.
  * Run the duplicate filename check under the sysctl_lock to guarantee
    we never add duplicate names.
  * Reduce the duplicate filename check to nearly O(M*N) where M is the
    number of entries in tthe table we are registering and N is the
    number of entries in the directory before we got there.

- Move the duplicate filename check into it's own function and call
  it directtly from __register_sysctl_table

- Kill the config option as the sanity checks are now cheap enough
  the config option is unnecessary. The original reason for the config
  option was because we had a huge table used to verify the proc filename
  to binary sysctl mapping.  That table has now evolved into the binary_sysctl
  translation layer and is no longer part of the sysctl_check code.

- Tighten up the permission checks.  Guarnateeing that files only have read
  or write permissions.

- Removed redudant check for parents having a procname as now everything has
  a procname.

- Generalize the backtrace logic so that we print a backtrace from
  any failure of __register_sysctl_table that was not caused by
  a memmory allocation failure.  The backtrace allows us to track
  down who erroneously registered a sysctl table.

Bechmark before (CONFIG_SYSCTL_CHECK=y):
    make-dummies 0 999 -> 12s
    rmmod dummy        -> 0.08s

Bechmark before (CONFIG_SYSCTL_CHECK=n):
    make-dummies 0 999 -> 0.7s
    rmmod dummy        -> 0.06s
    make-dummies 0 99999 -> 1m13s
    rmmod dummy          -> 0.38s

Benchmark after:
    make-dummies 0 999 -> 0.65s
    rmmod dummy        -> 0.055s
    make-dummies 0 9999 -> 1m10s
    rmmod dummy         -> 0.39s

The sysctl sanity checks now impose no measurable cost.

Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
2012-01-24 16:40:27 -08:00
..
2012-01-19 13:45:51 +11:00
2011-09-21 13:39:59 -07:00
2011-07-26 16:49:47 -07:00
2011-03-11 14:25:50 +00:00
2011-10-29 21:20:22 +02:00
2012-01-10 16:30:51 -08:00
2011-07-26 16:49:47 -07:00
2011-03-31 11:26:23 -03:00
2012-01-03 22:54:56 -05:00
2011-09-20 23:24:44 -04:00
2011-11-02 16:07:00 -07:00
2011-11-28 21:12:42 +02:00
2010-08-09 20:45:05 -07:00
2011-07-25 20:57:15 -07:00
2011-08-06 18:32:45 -07:00
2011-11-04 17:47:34 -04:00
2011-03-31 11:26:23 -03:00
2011-11-28 21:12:42 +02:00
2010-06-16 18:08:13 +02:00
2011-12-08 19:52:43 -05:00
2011-03-31 11:26:23 -03:00