Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 1 Dec 2018 09:00:55 +1100 (EST)
From:      Bruce Evans <brde@optusnet.com.au>
To:        Edward Tomasz Napierala <trasz@freebsd.org>
Cc:        src-committers@freebsd.org, svn-src-all@freebsd.org,  svn-src-head@freebsd.org
Subject:   Re: svn commit: r341338 - head/share/man/man4
Message-ID:  <20181201071457.N4011@besplex.bde.org>
In-Reply-To: <201811301144.wAUBiGj6030552@repo.freebsd.org>
References:  <201811301144.wAUBiGj6030552@repo.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, 30 Nov 2018, Edward Tomasz Napierala wrote:

> Log:
>  Say in plain text what the 'debug' keymap action usually is.
>
>  MFC after:	2 weeks
>  Sponsored by:	DARPA, AFRL
>
> Modified:
>  head/share/man/man4/ddb.4
>
> Modified: head/share/man/man4/ddb.4
> ==============================================================================
> --- head/share/man/man4/ddb.4	Fri Nov 30 11:42:19 2018	(r341337)
> +++ head/share/man/man4/ddb.4	Fri Nov 30 11:44:16 2018	(r341338)
> @@ -108,7 +108,7 @@ If linked into the running kernel,
> it can be invoked locally with the
> .Ql debug
> .Xr keymap 5
> -action, or by setting setting the
> +action, usually mapped to Ctrl+Alt+Esc, or by setting setting the
> .Dv debug.kdb.enter
> sysctl to 1.
> The debugger is also invoked on kernel

Actually, it is usually mapped to Ctl-PrintScreen.  Ctl-Alt-Esc is a harder
to type alternative for this.  There is 1 more alias in syscons us.iso.kbd
and 4 more aliases in syscons us.iso.acc.kbd.  vt complicates things.  It
removes ".iso" from the file names and changes 1 unrelated entry in
us.iso.kbd.  It changes many unrelated entries in us.iso.acc.kbd, but all
changes seem to be to replace decimal constants by hex constants and mangle
the formatting.

There are many undocumented complications for enabling these keys.  Some
are:

- the config option BREAK_TO_DEBUGGER for enabling entry to kdb on serial
   line breaks is conflated with entering kdb with a breakpoint instruction
   and used to initialize the similarly conflated sysctl variable
   kdb_break_to_debugger.  Entering kdb on a serial line break is usually
   unwanted since it gives kdb entries when you unplug the cable or turn
   the other end off.  So if you have a serial console, this option should
   rarely be used the sysctl variabled should rarely be enabled.

   ddb.4 documents BREAK_TO_DEBUGGER and clearly says that it is (only) for
   serial lines and gives slightly different reasons for not using it, and
   documents kdb.break_to_debugger, but doesn't know about about the
   conflation or the kdb sysctls or the following complications.

- the sysctl variable controls entry to kdb using kdb_break() from all
   console drivers, so it should have to be enabled for the keys documented
   above to work, but it should be disabled for serial consoles.

   This is complicated by the conflation.  The "break" in kdb_break()
   means more like "break in to" than either "serial line break" or
   "breakpoint instruction".  sio and uart use this function for serial
   line breaks.  syscons uses this for the keys documented above.  But
   vt doesn't use this.

- the sysctl variable gives a layer of security for the keys documented
   above.  syscons gives 4 more layers of security.  That's 4 too many
   layers.  sio and uart don't add any layers.  vt doesn't use this layer,
   and adds its own layers.

   Details of the layers for syscons:
   - kdb entry keys can be disabled by omitting them from the
     keymap
   - IIRC, loading of keymaps is not privileged, so you will need some
     restrictions on accesses to syscons devices to secure the previous
     layer
   - config option SC_DISABLE_KDBKEY
   - sysctl variable enable_kdbkey which defaults to the inverse of the
     config option, or enabled if the config option is not set.

   Details of the layers for vt:
   - 2 layers for the keymap as for syscons
   - sysctl variable vt_kbd_debug.  The sysctl name has the vt_ prefix
     separate.  kbd_debug corresponds to the sysctl name enable_kdbkey.
     Both names are bad:
     - they are different (after removing the prefix)
     - no sc_ prefix in variable name for syscons
     - "kdb" for syscons looks like "kbd" which is a bad abbreviation for
       "keyboard" (should be "kb")
     - "kbd" for vt.  This might actually mean "keyboard".  Then "debug"
       is a verbose spelling of the "d" in "kdb", and "kdb" is not mentioned.

   The vt method is better, and I plan to change sysctl to use the same
   method as a first step in fixing the conflation.  The security restrictions
   should be per-device since you might have some secure consoles and some
   insecure consoles.  The separate security layers already give this for
   syscons and vt, but it is more needed for multiple serial consoles.

Everything except the kdb sysctl defaults to enabled, so it is easy to enable
entry to kdb via the keys documented above.  Disabling all entries to kdb
via keys involves understanding smaller mazes of security-related options
and sysctls:

- ALT_BREAK_TO_DEBUGGER option and kdb_alt_break_to_debugger sysctl.  This
   was originally only an alternative to serial line BREAK_TO_DEBUGGER.
   Its conflation with serial line breaks was smaller, but it now allows
   panics and reboots so it is even more misnamed than BREAK_TO_DEBUGGER.
   Separate security flags are needed for the different features in it.
   ddb.5 documents all this.

- in syscons, the enable_kdbkey sysctl is used for allowing the
   ALT_BREAK_TO_DEBUGGER sequences too.

- in vt, there are no extra controls on ALT_BREAK_TO_DEBUGGER sequences.
   This is the same as for sio and uart.

Bruce



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20181201071457.N4011>