Fixed multiple spellig errors.

Signed-off-by: Carlos E. Garcia <car...@cgarcia.org>
---
 drivers/staging/android/ion/ion_priv.h            |  6 +-
 drivers/staging/android/uapi/ion.h                |  2 +-
 drivers/staging/comedi/comedi_fops.c              |  2 +-
 drivers/staging/dgnc/TODO                         |  6 +-
 drivers/staging/dgnc/dgnc_neo.c                   |  2 +-
 drivers/staging/emxx_udc/emxx_udc.c               |  2 +-
 drivers/staging/fbtft/Kconfig                     |  2 +-
 drivers/staging/fwserial/dma_fifo.c               |  2 +-
 drivers/staging/fwserial/fwserial.h               |  2 +-
 drivers/staging/iio/Documentation/device.txt      |  2 +-
 drivers/staging/iio/iio_simple_dummy.h            |  2 +-
 drivers/staging/lustre/TODO                       |  2 +-
 drivers/staging/media/bcm2048/radio-bcm2048.c     |  4 +-
 drivers/staging/octeon-usb/octeon-hcd.c           |  4 +-
 drivers/staging/octeon-usb/octeon-hcd.h           |  2 +-
 drivers/staging/rtl8188eu/include/rtl8188e_hal.h  |  4 +-
 drivers/staging/rtl8192u/r8192U_dm.c              |  2 +-
 drivers/staging/rtl8712/rtl8712_xmit.c            |  2 +-
 drivers/staging/rtl8712/rtl871x_mp_phy_regdef.h   |  2 +-
 drivers/staging/rtl8723au/hal/HalPwrSeqCmd.c      |  2 +-
 drivers/staging/rtl8723au/hal/odm.c               |  2 +-
 drivers/staging/rtl8723au/hal/rtl8723a_hal_init.c |  2 +-
 drivers/staging/rtl8723au/hal/rtl8723a_phycfg.c   |  2 +-
 drivers/staging/rtl8723au/hal/rtl8723a_rf6052.c   |  4 +-
 drivers/staging/rtl8723au/hal/rtl8723au_xmit.c    |  2 +-
 drivers/staging/rtl8723au/hal/usb_halinit.c       |  2 +-
 drivers/staging/rtl8723au/include/odm_debug.h     |  2 +-
 drivers/staging/rtl8723au/include/rtl8723a_hal.h  |  2 +-
 drivers/staging/rtl8723au/include/rtw_cmd.h       |  2 +-
 drivers/staging/rtl8723au/include/rtw_mlme.h      | 10 +--
 drivers/staging/rtl8723au/include/rtw_mlme_ext.h  |  2 +-
 drivers/staging/rtl8723au/include/sta_info.h      |  2 +-
 drivers/staging/sm750fb/ddk750_help.h             |  2 +-
 drivers/staging/sm750fb/ddk750_mode.c             |  2 +-
 drivers/staging/sm750fb/ddk750_reg.h              |  4 +-
 drivers/staging/sm750fb/ddk750_sii164.c           |  4 +-
 drivers/staging/sm750fb/readme                    |  8 +--
 drivers/staging/sm750fb/sm750.c                   | 12 ++--
 drivers/staging/sm750fb/sm750_accel.c             |  4 +-
 drivers/staging/sm750fb/sm750_hw.h                |  2 +-
 drivers/staging/unisys/include/guestlinuxdebug.h  |  2 +-
 drivers/staging/vt6655/rxtx.c                     |  2 +-
 kernel/audit.c                                    | 47 +++++++-----
 kernel/audit.h                                    |  3 +
 kernel/audit_tree.c                               | 88 +++++++++++++++--------
 kernel/auditsc.c                                  |  9 +--
 46 files changed, 159 insertions(+), 118 deletions(-)

diff --git a/drivers/staging/android/ion/ion_priv.h 
b/drivers/staging/android/ion/ion_priv.h
index 18a5f93..52f1cd1 100644
--- a/drivers/staging/android/ion/ion_priv.h
+++ b/drivers/staging/android/ion/ion_priv.h
@@ -33,7 +33,7 @@ struct ion_buffer *ion_handle_buffer(struct ion_handle 
*handle);
 
 /**
  * struct ion_buffer - metadata for a particular buffer
- * @ref:               refernce count
+ * @ref:               reference count
  * @node:              node in the ion_device buffers tree
  * @dev:               back pointer to the ion_device
  * @heap:              back pointer to the heap the buffer came from
@@ -46,7 +46,7 @@ struct ion_buffer *ion_handle_buffer(struct ion_handle 
*handle);
  *                     an ion_phys_addr_t (and someday a phys_addr_t)
  * @lock:              protects the buffers cnt fields
  * @kmap_cnt:          number of times the buffer is mapped to the kernel
- * @vaddr:             the kenrel mapping if kmap_cnt is not zero
+ * @vaddr:             the kernel mapping if kmap_cnt is not zero
  * @dmap_cnt:          number of times the buffer is mapped for dma
  * @sg_table:          the sg table for the buffer if dmap_cnt is not zero
  * @pages:             flat array of pages in the buffer -- used by fault
@@ -266,7 +266,7 @@ void ion_heap_freelist_add(struct ion_heap *heap, struct 
ion_buffer *buffer);
 /**
  * ion_heap_freelist_drain - drain the deferred free list
  * @heap:              the heap
- * @size:              ammount of memory to drain in bytes
+ * @size:              amount of memory to drain in bytes
  *
  * Drains the indicated amount of memory from the deferred freelist 
immediately.
  * Returns the total amount freed.  The total freed may be higher depending
diff --git a/drivers/staging/android/uapi/ion.h 
b/drivers/staging/android/uapi/ion.h
index 6aa4956..68a14b4 100644
--- a/drivers/staging/android/uapi/ion.h
+++ b/drivers/staging/android/uapi/ion.h
@@ -179,7 +179,7 @@ struct ion_custom_data {
  * DOC: ION_IOC_SYNC - syncs a shared file descriptors to memory
  *
  * Deprecated in favor of using the dma_buf api's correctly (syncing
- * will happend automatically when the buffer is mapped to a device).
+ * will happen automatically when the buffer is mapped to a device).
  * If necessary should be used after touching a cached buffer from the cpu,
  * this will make the buffer in memory coherent.
  */
diff --git a/drivers/staging/comedi/comedi_fops.c 
b/drivers/staging/comedi/comedi_fops.c
index e78ddbe..dd3a4db6 100644
--- a/drivers/staging/comedi/comedi_fops.c
+++ b/drivers/staging/comedi/comedi_fops.c
@@ -1725,7 +1725,7 @@ cleanup:
 
 /*
  * COMEDI_CMDTEST ioctl
- * asynchronous aquisition command testing
+ * asynchronous acquisition command testing
  *
  * arg:
  *     pointer to comedi_cmd structure
diff --git a/drivers/staging/dgnc/TODO b/drivers/staging/dgnc/TODO
index 2b2c6ea..0e0825b 100644
--- a/drivers/staging/dgnc/TODO
+++ b/drivers/staging/dgnc/TODO
@@ -1,9 +1,9 @@
 * checkpatch fixes
-* remove unecessary comments
-* remove unecessary error messages. Example kzalloc() has its
+* remove unnecessary comments
+* remove unnecessary error messages. Example kzalloc() has its
   own error message. Adding an extra one is useless.
 * use goto statements for error handling when appropriate
-* there is a lot of unecessary code in the driver. It was
+* there is a lot of unnecessary code in the driver. It was
   originally a standalone driver. Remove uneeded code.
 
 Please send patches to Greg Kroah-Hartman <g...@kroah.com> and
diff --git a/drivers/staging/dgnc/dgnc_neo.c b/drivers/staging/dgnc/dgnc_neo.c
index f5a4d36..6312408 100644
--- a/drivers/staging/dgnc/dgnc_neo.c
+++ b/drivers/staging/dgnc/dgnc_neo.c
@@ -1203,7 +1203,7 @@ static void neo_copy_data_from_uart_to_queue(struct 
channel_t *ch)
                memcpy_fromio(ch->ch_rqueue + head, 
&ch->ch_neo_uart->txrxburst, n);
 
                /*
-                * Since RX_FIFO_DATA_ERROR was 0, we are guarenteed
+                * Since RX_FIFO_DATA_ERROR was 0, we are guaranteed
                 * that all the data currently in the FIFO is free of
                 * breaks and parity/frame/orun errors.
                 */
diff --git a/drivers/staging/emxx_udc/emxx_udc.c 
b/drivers/staging/emxx_udc/emxx_udc.c
index fbf82bc..18e30d2 100644
--- a/drivers/staging/emxx_udc/emxx_udc.c
+++ b/drivers/staging/emxx_udc/emxx_udc.c
@@ -1223,7 +1223,7 @@ static int _nbu2ss_epn_in_transfer(
        }
 
        /*-------------------------------------------------------------*/
-       /* Start tranfer */
+       /* Start transfer */
        iBufSize = req->req.length - req->req.actual;
        if (iBufSize > 0)
                result = _nbu2ss_epn_in_data(udc, ep, req, iBufSize);
diff --git a/drivers/staging/fbtft/Kconfig b/drivers/staging/fbtft/Kconfig
index 6cf0c58..346f189 100644
--- a/drivers/staging/fbtft/Kconfig
+++ b/drivers/staging/fbtft/Kconfig
@@ -12,7 +12,7 @@ config FB_TFT_AGM1264K_FL
        tristate "FB driver for the AGM1264K-FL LCD display"
        depends on FB_TFT
        help
-         Framebuffer support for the AGM1264K-FL LCD display (two Samsung 
KS0108 compatable chips)
+         Framebuffer support for the AGM1264K-FL LCD display (two Samsung 
KS0108 compatible chips)
 
 config FB_TFT_BD663474
        tristate "FB driver for the BD663474 LCD Controller"
diff --git a/drivers/staging/fwserial/dma_fifo.c 
b/drivers/staging/fwserial/dma_fifo.c
index 0279062..7a3347c 100644
--- a/drivers/staging/fwserial/dma_fifo.c
+++ b/drivers/staging/fwserial/dma_fifo.c
@@ -56,7 +56,7 @@ void dma_fifo_init(struct dma_fifo *fifo)
  * @size: 'apparent' size, in bytes, of fifo
  * @align: dma alignment to maintain (should be at least cpu cache alignment),
  *         must be power of 2
- * @tx_limit: maximum # of bytes transmissable per dma (rounded down to
+ * @tx_limit: maximum # of bytes transmissible per dma (rounded down to
  *            multiple of alignment, but at least align size)
  * @open_limit: maximum # of outstanding dma transactions allowed
  * @gfp_mask: get_free_pages mask, passed to kmalloc()
diff --git a/drivers/staging/fwserial/fwserial.h 
b/drivers/staging/fwserial/fwserial.h
index 98b853d..787aa4f 100644
--- a/drivers/staging/fwserial/fwserial.h
+++ b/drivers/staging/fwserial/fwserial.h
@@ -218,7 +218,7 @@ struct fwconsole_ops {
  *         prevented with the IN_TX flag. Scheduled under lock to
  *         limit scheduling when fifo has just been drained.
  * @tx_fifo: fifo used to store & block-up writes for dma to remote
- * @max_payload: max bytes transmissable per dma (based on peer's max_payload)
+ * @max_payload: max bytes transmissible per dma (based on peer's max_payload)
  * @status_mask: UART_LSR_* bitmask significant to rx (based on termios)
  * @ignore_mask: UART_LSR_* bitmask of states to ignore (also based on termios)
  * @break_ctl: if set, port is 'sending break' to remote
diff --git a/drivers/staging/iio/Documentation/device.txt 
b/drivers/staging/iio/Documentation/device.txt
index 8be32e5..54ef0de 100644
--- a/drivers/staging/iio/Documentation/device.txt
+++ b/drivers/staging/iio/Documentation/device.txt
@@ -52,7 +52,7 @@ Then fill in the following:
        * info->write_event_value:
                Write the value associated with on sensor event detectors. E.g.
                a threshold above which an interrupt occurs.  Note that the
-               meaning of the value to be set is event type dependant.
+               meaning of the value to be set is event type dependent.
 
 - indio_dev->modes:
        Specify whether direct access and / or ring buffer access is supported.
diff --git a/drivers/staging/iio/iio_simple_dummy.h 
b/drivers/staging/iio/iio_simple_dummy.h
index 34989bf..d86ccb7 100644
--- a/drivers/staging/iio/iio_simple_dummy.h
+++ b/drivers/staging/iio/iio_simple_dummy.h
@@ -25,7 +25,7 @@ struct iio_dummy_regs;
  * @accel_calibscale:          cache for acceleration calibscale
  * @lock:                      lock to ensure state is consistent
  * @event_irq:                 irq number for event line (faked)
- * @event_val:                 cache for event theshold value
+ * @event_val:                 cache for event threshold value
  * @event_en:                  cache of whether event is enabled
  */
 struct iio_dummy_state {
diff --git a/drivers/staging/lustre/TODO b/drivers/staging/lustre/TODO
index 0512594..f194417 100644
--- a/drivers/staging/lustre/TODO
+++ b/drivers/staging/lustre/TODO
@@ -1,6 +1,6 @@
 * Possible remaining coding style fix.
 * Remove deadcode.
-* Seperate client/server functionality. Functions only used by server can be
+* Separate client/server functionality. Functions only used by server can be
   removed from client.
 * Clean up libcfs layer. Ideally we can remove include/linux/libcfs entirely.
 * Clean up CLIO layer. Lustre client readahead/writeback control needs to 
better
diff --git a/drivers/staging/media/bcm2048/radio-bcm2048.c 
b/drivers/staging/media/bcm2048/radio-bcm2048.c
index e9d0691..cf91281 100644
--- a/drivers/staging/media/bcm2048/radio-bcm2048.c
+++ b/drivers/staging/media/bcm2048/radio-bcm2048.c
@@ -217,7 +217,7 @@
 #define BCM2048_FREQ_ERROR_FLOOR       -20
 #define BCM2048_FREQ_ERROR_ROOF                20
 
-/* -60 dB is reported as full signal strenght */
+/* -60 dB is reported as full signal strength */
 #define BCM2048_RSSI_LEVEL_BASE                -60
 #define BCM2048_RSSI_LEVEL_ROOF                -100
 #define BCM2048_RSSI_LEVEL_ROOF_NEG    100
@@ -2468,7 +2468,7 @@ static int bcm2048_vidioc_g_tuner(struct file *file, void 
*priv,
                } else {
                        /*
                         * RSSI level -60 dB is defined to report full
-                        * signal strenght
+                        * signal strength
                         */
                        rssi = bcm2048_get_fm_rssi(bdev);
                        if (rssi >= BCM2048_RSSI_LEVEL_BASE) {
diff --git a/drivers/staging/octeon-usb/octeon-hcd.c 
b/drivers/staging/octeon-usb/octeon-hcd.c
index 9e5476e..f9c506d 100644
--- a/drivers/staging/octeon-usb/octeon-hcd.c
+++ b/drivers/staging/octeon-usb/octeon-hcd.c
@@ -1233,7 +1233,7 @@ static int cvmx_usb_fill_tx_hw(struct cvmx_usb_state *usb,
                                                        usb->index) ^ 4;
                int words = available;
 
-               /* Limit the amount of data to waht the SW fifo has */
+               /* Limit the amount of data to what the SW fifo has */
                if (fifo->entry[i].size <= available) {
                        words = fifo->entry[i].size;
                        fifo->tail++;
@@ -1843,7 +1843,7 @@ static void cvmx_usb_start_channel(struct cvmx_usb_state 
*usb, int channel,
                transaction->xfersize = usbc_hctsiz.s.xfersize;
                transaction->pktcnt = usbc_hctsiz.s.pktcnt;
        }
-       /* Remeber when we start a split transaction */
+       /* Remember when we start a split transaction */
        if (cvmx_usb_pipe_needs_split(usb, pipe))
                usb->active_split = transaction;
        USB_SET_FIELD32(CVMX_USBCX_HCCHARX(channel, usb->index),
diff --git a/drivers/staging/octeon-usb/octeon-hcd.h 
b/drivers/staging/octeon-usb/octeon-hcd.h
index 3e351ab..70e7fa5 100644
--- a/drivers/staging/octeon-usb/octeon-hcd.h
+++ b/drivers/staging/octeon-usb/octeon-hcd.h
@@ -1693,7 +1693,7 @@ union cvmx_usbnx_usbp_ctl_status {
         * struct cvmx_usbnx_usbp_ctl_status_s
         * @txrisetune: HS Transmitter Rise/Fall Time Adjustment
         * @txvreftune: HS DC Voltage Level Adjustment
-        * @txfslstune: FS/LS Source Impedence Adjustment
+        * @txfslstune: FS/LS Source Impedance Adjustment
         * @txhsxvtune: Transmitter High-Speed Crossover Adjustment
         * @sqrxtune: Squelch Threshold Adjustment
         * @compdistune: Disconnect Threshold Adjustment
diff --git a/drivers/staging/rtl8188eu/include/rtl8188e_hal.h 
b/drivers/staging/rtl8188eu/include/rtl8188e_hal.h
index b8c42ee..5015748 100644
--- a/drivers/staging/rtl8188eu/include/rtl8188e_hal.h
+++ b/drivers/staging/rtl8188eu/include/rtl8188e_hal.h
@@ -159,7 +159,7 @@ struct txpowerinfo24g {
 /*  | 1byte|----8bytes----|1byte|--5bytes--| */
 /*  |         |            Reserved(14bytes)         | */
 
-/*  PG data exclude header, dummy 6 bytes frome CP test and reserved 1byte. */
+/*  PG data exclude header, dummy 6 bytes from CP test and reserved 1byte. */
 #define EFUSE_OOB_PROTECT_BYTES                        15
 
 #define                HWSET_MAX_SIZE_88E              512
@@ -177,7 +177,7 @@ struct txpowerinfo24g {
 /*  9bytes + 1byt + 5bytes and pre 1byte. */
 /*  For worst case: */
 /*  | 2byte|----8bytes----|1byte|--7bytes--| 92D */
-/*  PG data exclude header, dummy 7 bytes frome CP test and reserved 1byte. */
+/*  PG data exclude header, dummy 7 bytes from CP test and reserved 1byte. */
 #define                EFUSE_OOB_PROTECT_BYTES_88E     18
 #define                EFUSE_PROTECT_BYTES_BANK_88E    16
 
diff --git a/drivers/staging/rtl8192u/r8192U_dm.c 
b/drivers/staging/rtl8192u/r8192U_dm.c
index 12dd19e..416a1dd 100644
--- a/drivers/staging/rtl8192u/r8192U_dm.c
+++ b/drivers/staging/rtl8192u/r8192U_dm.c
@@ -120,7 +120,7 @@ static      void    dm_ctstoself(struct net_device *dev);
  *             Prepare SW resource for HW dynamic mechanism.
  *
  *     Assumption:
- *             This function is only invoked at driver intialization once.
+ *             This function is only invoked at driver initialization once.
  */
 void init_hal_dm(struct net_device *dev)
 {
diff --git a/drivers/staging/rtl8712/rtl8712_xmit.c 
b/drivers/staging/rtl8712/rtl8712_xmit.c
index a3093ac..8c756df 100644
--- a/drivers/staging/rtl8712/rtl8712_xmit.c
+++ b/drivers/staging/rtl8712/rtl8712_xmit.c
@@ -340,7 +340,7 @@ u8 r8712_append_mpdu_unit(struct xmit_buf *pxmitbuf,
 u8 r8712_xmitframe_aggr_1st(struct xmit_buf *pxmitbuf,
                        struct xmit_frame *pxmitframe)
 {
-       /* linux complete context doesnt need to protect */
+       /* linux complete context doesn't need to protect */
        pxmitframe->pxmitbuf = pxmitbuf;
        pxmitbuf->priv_data = pxmitframe;
        pxmitframe->pxmit_urb[0] = pxmitbuf->pxmit_urb[0];
diff --git a/drivers/staging/rtl8712/rtl871x_mp_phy_regdef.h 
b/drivers/staging/rtl8712/rtl871x_mp_phy_regdef.h
index 8e25862..2e9120a 100644
--- a/drivers/staging/rtl8712/rtl871x_mp_phy_regdef.h
+++ b/drivers/staging/rtl8712/rtl871x_mp_phy_regdef.h
@@ -603,7 +603,7 @@
 #define        bCCKRxIG                0x7f00
 #define        bCCKLNAPolarity         0x800000
 #define        bCCKRx1stGain           0x7f0000
-#define        bCCKRFExtend            0x20000000 /* CCK Rx inital gain 
polarity */
+#define        bCCKRFExtend            0x20000000 /* CCK Rx initial gain 
polarity */
 #define        bCCKRxAGCSatLevel       0x1f000000
 #define        bCCKRxAGCSatCount       0xe0
 #define        bCCKRxRFSettle          0x1f       /* AGCsamp_dly */
diff --git a/drivers/staging/rtl8723au/hal/HalPwrSeqCmd.c 
b/drivers/staging/rtl8723au/hal/HalPwrSeqCmd.c
index ae090ab..0a3d96e 100644
--- a/drivers/staging/rtl8723au/hal/HalPwrSeqCmd.c
+++ b/drivers/staging/rtl8723au/hal/HalPwrSeqCmd.c
@@ -92,7 +92,7 @@ u8 HalPwrSeqCmdParsing23a(struct rtw_adapter *padapter, u8 
CutVersion,
                                value |= (GET_PWR_CFG_VALUE(PwrCfgCmd) &
                                          GET_PWR_CFG_MASK(PwrCfgCmd));
 
-                               /*  Write the value back to sytem register */
+                               /*  Write the value back to system register */
                                rtl8723au_write8(padapter, offset, value);
                                break;
 
diff --git a/drivers/staging/rtl8723au/hal/odm.c 
b/drivers/staging/rtl8723au/hal/odm.c
index ec543cf..eb598cf 100644
--- a/drivers/staging/rtl8723au/hal/odm.c
+++ b/drivers/staging/rtl8723au/hal/odm.c
@@ -40,7 +40,7 @@ static u32 EDCAParam[HT_IOT_PEER_MAX][3] = {          /*  UL  
                DL */
        {0x5ea42b, 0xa630, 0x5e431c}, /*  11:airgocap AP */
 };
 
-/*  EDCA Paramter for AP/ADSL   by Mingzhi 2011-11-22 */
+/*  EDCA Parameter for AP/ADSL   by Mingzhi 2011-11-22 */
 
 /*  Global var */
 u32 OFDMSwingTable23A[OFDM_TABLE_SIZE_92D] = {
diff --git a/drivers/staging/rtl8723au/hal/rtl8723a_hal_init.c 
b/drivers/staging/rtl8723au/hal/rtl8723a_hal_init.c
index 04d0183..efe1730 100644
--- a/drivers/staging/rtl8723au/hal/rtl8723a_hal_init.c
+++ b/drivers/staging/rtl8723au/hal/rtl8723a_hal_init.c
@@ -1396,7 +1396,7 @@ static void _DisableAnalog(struct rtw_adapter *padapter, 
bool bWithoutHWSM)
                /* value16 |= (APDM_HOST | FSM_HSUS |/PFM_ALDN); */
                /*  2010/08/31 According to Filen description, we need to
                    use HW to shut down 8051 automatically. */
-               /*  Becasue suspend operatione need the asistance of 8051
+               /*  Because suspend operation need the asistance of 8051
                    to wait for 3ms. */
                value16 = APDM_HOST | AFSM_HSUS | PFM_ALDN;
        } else {
diff --git a/drivers/staging/rtl8723au/hal/rtl8723a_phycfg.c 
b/drivers/staging/rtl8723au/hal/rtl8723a_phycfg.c
index 46a3065..7fa9780 100644
--- a/drivers/staging/rtl8723au/hal/rtl8723a_phycfg.c
+++ b/drivers/staging/rtl8723au/hal/rtl8723a_phycfg.c
@@ -660,7 +660,7 @@ phy_BB8723a_Config_ParaFile(struct rtw_adapter *Adapter)
 
        /*  */
        /*  1. Read PHY_REG.TXT BB INIT!! */
-       /*  We will seperate as 88C / 92C according to chip version */
+       /*  We will separate as 88C / 92C according to chip version */
        /*  */
        ODM_ReadAndConfig_PHY_REG_1T_8723A(&pHalData->odmpriv);
 
diff --git a/drivers/staging/rtl8723au/hal/rtl8723a_rf6052.c 
b/drivers/staging/rtl8723au/hal/rtl8723a_rf6052.c
index 3e3f186..4909835 100644
--- a/drivers/staging/rtl8723au/hal/rtl8723a_rf6052.c
+++ b/drivers/staging/rtl8723au/hal/rtl8723a_rf6052.c
@@ -138,7 +138,7 @@ void rtl823a_phy_rf6052setccktxpower(struct rtw_adapter 
*Adapter,
 /*  Currently, we cannot fully disable driver dynamic tx power
  *  mechanism because it is referenced by BT coexist mechanism. */
 /*  In the future, two mechanism shall be separated from each other
- *  and maintained independantly. Thanks for Lanhsin's reminder. */
+ *  and maintained independently. Thanks for Lanhsin's reminder. */
                if (pdmpriv->DynamicTxHighPowerLvl == TxHighPwrLevel_Level1) {
                        TxAGC[RF_PATH_A] = 0x10101010;
                        TxAGC[RF_PATH_B] = 0x10101010;
@@ -300,7 +300,7 @@ getTxPowerWriteValByRegulatory(struct rtw_adapter *Adapter, 
u8 Channel,
 /*  Currently, we cannot fully disable driver dynamic tx power mechanism
     because it is referenced by BT coexist mechanism. */
 /*  In the future, two mechanism shall be separated from each other and
-    maintained independantly. Thanks for Lanhsin's reminder. */
+    maintained independently. Thanks for Lanhsin's reminder. */
 
                if (pdmpriv->DynamicTxHighPowerLvl == TxHighPwrLevel_Level1)
                        writeVal = 0x14141414;
diff --git a/drivers/staging/rtl8723au/hal/rtl8723au_xmit.c 
b/drivers/staging/rtl8723au/hal/rtl8723au_xmit.c
index 6bf87fe..14746dd 100644
--- a/drivers/staging/rtl8723au/hal/rtl8723au_xmit.c
+++ b/drivers/staging/rtl8723au/hal/rtl8723au_xmit.c
@@ -252,7 +252,7 @@ static s32 update_txdesc(struct xmit_frame *pxmitframe, u8 
*pmem, s32 sz)
        }
 
        /*  (1) The sequence number of each non-Qos frame / broadcast / 
multicast / */
-       /*  mgnt frame should be controled by Hw because Fw will also send null 
data */
+       /*  mgnt frame should be controlled by Hw because Fw will also send 
null data */
        /*  which we cannot control when Fw LPS enable. */
        /*  --> default enable non-Qos data sequense number. 2010.06.23. by 
tynli. */
        /*  (2) Enable HW SEQ control for beacon packet, because we use Hw 
beacon. */
diff --git a/drivers/staging/rtl8723au/hal/usb_halinit.c 
b/drivers/staging/rtl8723au/hal/usb_halinit.c
index 42ae29d..68156a1 100644
--- a/drivers/staging/rtl8723au/hal/usb_halinit.c
+++ b/drivers/staging/rtl8723au/hal/usb_halinit.c
@@ -360,7 +360,7 @@ static void _InitWMACSetting(struct rtw_adapter *Adapter)
        /*  2010.09.08 hpfan */
        /*  Since ADF is removed from RCR, ps-poll will not be indicate
            to driver, */
-       /*  RxFilterMap should mask ps-poll to gurantee AP mode can
+       /*  RxFilterMap should mask ps-poll to guarantee AP mode can
            rx ps-poll. */
        /* value16 = 0x400; */
        /* rtl8723au_write16(Adapter, REG_RXFLTMAP1, value16); */
diff --git a/drivers/staging/rtl8723au/include/odm_debug.h 
b/drivers/staging/rtl8723au/include/odm_debug.h
index 83be5ba..c4b375a 100644
--- a/drivers/staging/rtl8723au/include/odm_debug.h
+++ b/drivers/staging/rtl8723au/include/odm_debug.h
@@ -22,7 +22,7 @@
 /*     Define the debug levels */
 /*  */
 /*     1.      DBG_TRACE and DBG_LOUD are used for normal cases. */
-/*     So that, they can help SW engineer to develope or trace states changed 
*/
+/*     So that, they can help SW engineer to develop or trace states changed */
 /*     and also help HW enginner to trace every operation to and from HW, */
 /*     e.g IO, Tx, Rx. */
 /*  */
diff --git a/drivers/staging/rtl8723au/include/rtl8723a_hal.h 
b/drivers/staging/rtl8723au/include/rtl8723a_hal.h
index ad3a442..8ee301b 100644
--- a/drivers/staging/rtl8723au/include/rtl8723a_hal.h
+++ b/drivers/staging/rtl8723au/include/rtl8723a_hal.h
@@ -193,7 +193,7 @@ enum ChannelPlan
 /*  |         |            Reserved(14bytes)         | */
 /*  */
 
-/*  PG data exclude header, dummy 6 bytes frome CP test and reserved 1byte. */
+/*  PG data exclude header, dummy 6 bytes from CP test and reserved 1byte. */
 #define EFUSE_OOB_PROTECT_BYTES                        15
 
 #define EFUSE_REAL_CONTENT_LEN_8723A   512
diff --git a/drivers/staging/rtl8723au/include/rtw_cmd.h 
b/drivers/staging/rtl8723au/include/rtw_cmd.h
index 775dcdc..4dcc925 100644
--- a/drivers/staging/rtl8723au/include/rtw_cmd.h
+++ b/drivers/staging/rtl8723au/include/rtw_cmd.h
@@ -657,7 +657,7 @@ struct TDLSoption_param {
 
 Result:
 0x00: success
-0x01: sucess, and check Response.
+0x01: success, and check Response.
 0x02: cmd ignored due to duplicated sequcne number
 0x03: cmd dropped due to invalid cmd code
 0x04: reserved.
diff --git a/drivers/staging/rtl8723au/include/rtw_mlme.h 
b/drivers/staging/rtl8723au/include/rtw_mlme.h
index a6751f1..dbd3a5f 100644
--- a/drivers/staging/rtl8723au/include/rtw_mlme.h
+++ b/drivers/staging/rtl8723au/include/rtw_mlme.h
@@ -50,11 +50,11 @@
 #define        WIFI_SITE_MONITOR       0x00000800
 
 #define        WIFI_MP_STATE           0x00010000
-#define        WIFI_MP_CTX_BACKGROUND  0x00020000      /*  in continous tx 
background */
-#define        WIFI_MP_CTX_ST          0x00040000      /*  in continous tx 
with single-tone */
-#define        WIFI_MP_CTX_BACKGROUND_PENDING  0x00080000      /*  pending in 
continous tx background due to out of skb */
-#define        WIFI_MP_CTX_CCK_HW      0x00100000      /*  in continous tx */
-#define        WIFI_MP_CTX_CCK_CS      0x00200000      /*  in continous tx 
with carrier suppression */
+#define        WIFI_MP_CTX_BACKGROUND  0x00020000      /*  in continuous tx 
background */
+#define        WIFI_MP_CTX_ST          0x00040000      /*  in continuous tx 
with single-tone */
+#define        WIFI_MP_CTX_BACKGROUND_PENDING  0x00080000      /*  pending in 
continuous tx background due to out of skb */
+#define        WIFI_MP_CTX_CCK_HW      0x00100000      /*  in continuous tx */
+#define        WIFI_MP_CTX_CCK_CS      0x00200000      /*  in continuous tx 
with carrier suppression */
 #define   WIFI_MP_LPBK_STATE   0x00400000
 
 #define _FW_UNDER_LINKING      WIFI_UNDER_LINKING
diff --git a/drivers/staging/rtl8723au/include/rtw_mlme_ext.h 
b/drivers/staging/rtl8723au/include/rtw_mlme_ext.h
index ffb37b2..ea2a6c9 100644
--- a/drivers/staging/rtl8723au/include/rtw_mlme_ext.h
+++ b/drivers/staging/rtl8723au/include/rtw_mlme_ext.h
@@ -103,7 +103,7 @@ extern unsigned char WMM_PARA_OUI23A[];
 /*  Note: */
 /*     We just add new channel plan when the new channel plan is different 
from any of the following */
 /*     channel plan. */
-/*     If you just wnat to customize the acitions(scan period or join actions) 
about one of the channel plan, */
+/*     If you just want to customize the actions(scan period or join actions) 
about one of the channel plan, */
 /*     customize them in struct rt_channel_info in the RT_CHANNEL_LIST. */
 /*  */
 enum  { /* _RT_CHANNEL_DOMAIN */
diff --git a/drivers/staging/rtl8723au/include/sta_info.h 
b/drivers/staging/rtl8723au/include/sta_info.h
index c756b4f..e726005 100644
--- a/drivers/staging/rtl8723au/include/sta_info.h
+++ b/drivers/staging/rtl8723au/include/sta_info.h
@@ -332,7 +332,7 @@ struct sta_priv {
         */
        struct sta_info *sta_aid[NUM_STA];
 
-       u16 sta_dz_bitmap;/* only support 15 stations, staion aid bitmap
+       u16 sta_dz_bitmap;/* only support 15 stations, station aid bitmap
                           * for sleeping sta. */
        u16 tim_bitmap;/* only support 15 stations,
                        * aid=0~15 mapping bit0~bit15 */
diff --git a/drivers/staging/sm750fb/ddk750_help.h 
b/drivers/staging/sm750fb/ddk750_help.h
index 07c8264..e7e49ce 100644
--- a/drivers/staging/sm750fb/ddk750_help.h
+++ b/drivers/staging/sm750fb/ddk750_help.h
@@ -14,7 +14,7 @@
 #warning "big endian on target cpu and enable nature big endian support of 718 
capability !"
 #define PEEK32(addr)                   __raw_readl(mmio750 + addr)
 #define POKE32(addr,data)              __raw_writel(data, mmio750 + addr)
-#else /* software control endianess */
+#else /* software control endianness */
 #define PEEK32(addr) readl(addr + mmio750)
 #define POKE32(addr,data) writel(data, addr + mmio750)
 #endif
diff --git a/drivers/staging/sm750fb/ddk750_mode.c 
b/drivers/staging/sm750fb/ddk750_mode.c
index 2e418fb..021d4c3 100644
--- a/drivers/staging/sm750fb/ddk750_mode.c
+++ b/drivers/staging/sm750fb/ddk750_mode.c
@@ -162,7 +162,7 @@ static int programModeRegisters(mode_parameter_t * 
pModeParam,pll_value_t * pll)
 
                /* May a hardware bug or just my test chip (not confirmed).
                * PANEL_DISPLAY_CTRL register seems requiring few writes
-               * before a value can be succesfully written in.
+               * before a value can be successfully written in.
                * Added some masks to mask out the reserved bits.
                * Note: This problem happens by design. The hardware will wait 
for the
                *       next vertical sync to turn on/off the plane.
diff --git a/drivers/staging/sm750fb/ddk750_reg.h 
b/drivers/staging/sm750fb/ddk750_reg.h
index 2016f97..1a40dc2 100644
--- a/drivers/staging/sm750fb/ddk750_reg.h
+++ b/drivers/staging/sm750fb/ddk750_reg.h
@@ -1885,10 +1885,10 @@
 #define DISPLAY_CONTROL_750LE  0x80288
 /* Palette RAM */
 
-/* Panel Pallete register starts at 0x080400 ~ 0x0807FC */
+/* Panel Palette register starts at 0x080400 ~ 0x0807FC */
 #define PANEL_PALETTE_RAM                             0x080400
 
-/* Panel Pallete register starts at 0x080C00 ~ 0x080FFC */
+/* Panel Palette register starts at 0x080C00 ~ 0x080FFC */
 #define CRT_PALETTE_RAM                               0x080C00
 
 /* 2D registers
diff --git a/drivers/staging/sm750fb/ddk750_sii164.c 
b/drivers/staging/sm750fb/ddk750_sii164.c
index 3d224d6..84464c1 100644
--- a/drivers/staging/sm750fb/ddk750_sii164.c
+++ b/drivers/staging/sm750fb/ddk750_sii164.c
@@ -256,7 +256,7 @@ long sii164InitChip(
 
 
 
-/* below sii164 function is not neccessary */
+/* below sii164 function is not necessary */
 
 #ifdef SII164_FULL_FUNCTIONS
 
@@ -388,7 +388,7 @@ unsigned char sii164IsConnected(void)
 
 /*
  *  sii164CheckInterrupt
- *      Checks if interrupt has occured.
+ *      Checks if interrupt has occurred.
  *
  *  Output:
  *      0   - No interrupt
diff --git a/drivers/staging/sm750fb/readme b/drivers/staging/sm750fb/readme
index ab9af79..cfa4595 100644
--- a/drivers/staging/sm750fb/readme
+++ b/drivers/staging/sm750fb/readme
@@ -5,7 +5,7 @@ Introduction:
        - 2D acceleration
        - 16MB integrated video memory
 
-About the kernel module paramter of driver:
+About the kernel module parameter of driver:
 
        Use 1280,8bpp index color and 60 hz mode:
        insmod ./sm750fb.ko g_option="1280x1024-8@60"
@@ -20,16 +20,16 @@ About the kernel module paramter of driver:
        and user can use con2fb to link fbX and ttyX
 
        Notes:
-       1) if you build the driver with built-in method, the paramter
+       1) if you build the driver with built-in method, the parameter
                you edited in the grub config file will be also the
-               same format as above modular method,but additionaly add
+               same format as above modular method,but additionally add
                "video=sm750fb:"
                ahead of parameters,so,it looks like:
                video=sm750fb:noaccel,1280x1024@60,otherparam,etc...
                it equal to modular method with below command:
                insmod ./sm750fb.ko 
g_option="noaccel:1280x1024@60:otherparm:etc..."
 
-       2) if you put 800x600 into the paramter without bpp and
+       2) if you put 800x600 into the parameter without bpp and
                refresh rate, kernel driver will defaulty use 16bpp and 60hz
 
 Important:
diff --git a/drivers/staging/sm750fb/sm750.c b/drivers/staging/sm750fb/sm750.c
index 3c7ea95..77310ff 100644
--- a/drivers/staging/sm750fb/sm750.c
+++ b/drivers/staging/sm750fb/sm750.c
@@ -207,7 +207,7 @@ static void lynxfb_ops_fillrect(struct fb_info *info,
 
        /*
         * If not use spin_lock,system will die if user load driver
-        * and immediatly unload driver frequently (dual)
+        * and immediately unload driver frequently (dual)
         */
        if (share->dual)
                spin_lock(&share->slock);
@@ -239,7 +239,7 @@ static void lynxfb_ops_copyarea(struct fb_info *info,
 
        /*
         * If not use spin_lock, system will die if user load driver
-        * and immediatly unload driver frequently (dual)
+        * and immediately unload driver frequently (dual)
         */
        if (share->dual)
                spin_lock(&share->slock);
@@ -283,7 +283,7 @@ static void lynxfb_ops_imageblit(struct fb_info *info,
 _do_work:
        /*
         * If not use spin_lock, system will die if user load driver
-        * and immediatly unload driver frequently (dual)
+        * and immediately unload driver frequently (dual)
         */
        if (share->dual)
                spin_lock(&share->slock);
@@ -479,7 +479,7 @@ static int lynxfb_resume(struct pci_dev *pdev)
 
        ret = pci_set_power_state(pdev, PCI_D0);
        if (ret) {
-               pr_err("error:%d occured in pci_set_power_state\n", ret);
+               pr_err("error:%d occurred in pci_set_power_state\n", ret);
                return ret;
        }
 
@@ -488,7 +488,7 @@ static int lynxfb_resume(struct pci_dev *pdev)
                pci_restore_state(pdev);
                ret = pci_enable_device(pdev);
                if (ret) {
-                       pr_err("error:%d occured in pci_enable_device\n", ret);
+                       pr_err("error:%d occurred in pci_enable_device\n", ret);
                        return ret;
                }
                pci_set_master(pdev);
@@ -1170,7 +1170,7 @@ static int lynxfb_pci_probe(struct pci_dev *pdev,
                        pr_err("Unable to setup MTRR.\n");
                } else {
                        share->mtrr.vram_added = 1;
-                       pr_info("MTRR added succesfully\n");
+                       pr_info("MTRR added successfully\n");
                }
        }
 #endif
diff --git a/drivers/staging/sm750fb/sm750_accel.c 
b/drivers/staging/sm750fb/sm750_accel.c
index c5a3726..6a04ef8 100644
--- a/drivers/staging/sm750fb/sm750_accel.c
+++ b/drivers/staging/sm750fb/sm750_accel.c
@@ -246,7 +246,7 @@ unsigned int rop2)   /* ROP value */
 #if 0
     /* Program pitch (distance between the 1st points of two adjacent lines).
        Note that input pitch is BYTE value, but the 2D Pitch register uses
-       pixel values. Need Byte to pixel convertion.
+       pixel values. Need Byte to pixel conversion.
     */
        if(Bpp == 3){
                        sx *= 3;
@@ -362,7 +362,7 @@ int hw_imageblit(struct lynx_accel *accel,
 #if 0
     /* Program pitch (distance between the 1st points of two adjacent lines).
        Note that input pitch is BYTE value, but the 2D Pitch register uses
-       pixel values. Need Byte to pixel convertion.
+       pixel values. Need Byte to pixel conversion.
     */
        if(bytePerPixel == 3 ){
                dx *= 3;
diff --git a/drivers/staging/sm750fb/sm750_hw.h 
b/drivers/staging/sm750fb/sm750_hw.h
index b05be5e..c607d9b 100644
--- a/drivers/staging/sm750fb/sm750_hw.h
+++ b/drivers/staging/sm750fb/sm750_hw.h
@@ -65,7 +65,7 @@ struct sm750_state{
 };
 
 /*     sm750_share stands for a presentation of two frame buffer
-       that use one sm750 adaptor, it is similiar to the super class of 
lynx_share
+       that use one sm750 adaptor, it is similar to the super class of 
lynx_share
        in C++
 */
 
diff --git a/drivers/staging/unisys/include/guestlinuxdebug.h 
b/drivers/staging/unisys/include/guestlinuxdebug.h
index 957a627..98150aa5 100644
--- a/drivers/staging/unisys/include/guestlinuxdebug.h
+++ b/drivers/staging/unisys/include/guestlinuxdebug.h
@@ -135,7 +135,7 @@ enum event_pc {                     /* POSTCODE event 
identifier tuples */
 #define POSTCODE_SEVERITY_ERR DIAG_SEVERITY_ERR
 #define POSTCODE_SEVERITY_WARNING DIAG_SEVERITY_WARNING
 #define POSTCODE_SEVERITY_INFO DIAG_SEVERITY_PRINT     /* TODO-> Info currently
-                                                        * doesnt show, so we
+                                                        * doesn't show, so we
                                                         * set info=warning */
 /* example call of POSTCODE_LINUX_2(VISOR_CHIPSET_PC, POSTCODE_SEVERITY_ERR);
  * Please also note that the resulting postcode is in hex, so if you are
diff --git a/drivers/staging/vt6655/rxtx.c b/drivers/staging/vt6655/rxtx.c
index 7468776..33c4aa4 100644
--- a/drivers/staging/vt6655/rxtx.c
+++ b/drivers/staging/vt6655/rxtx.c
@@ -656,7 +656,7 @@ s_vFillRTSHead(
                uRTSFrameLen -= 4;
        }
 
-       /* Note: So far RTSHead dosen't appear in ATIM & Beacom DMA, so we 
don't need to take them into account.
+       /* Note: So far RTSHead doesn't appear in ATIM & Beacom DMA, so we 
don't need to take them into account.
               Otherwise, we need to modify codes for them. */
        if (byPktType == PK_TYPE_11GB || byPktType == PK_TYPE_11GA) {
                if (byFBOption == AUTO_FB_NONE) {
diff --git a/kernel/audit.c b/kernel/audit.c
index 72ab759..ab5745d 100644
--- a/kernel/audit.c
+++ b/kernel/audit.c
@@ -43,6 +43,7 @@
 
 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
 
+#include <linux/file.h>
 #include <linux/init.h>
 #include <linux/types.h>
 #include <linux/atomic.h>
@@ -107,6 +108,7 @@ static u32  audit_rate_limit;
  * When set to zero, this means unlimited. */
 static u32     audit_backlog_limit = 64;
 #define AUDIT_BACKLOG_WAIT_TIME (60 * HZ)
+static u32     audit_backlog_wait_time_master = AUDIT_BACKLOG_WAIT_TIME;
 static u32     audit_backlog_wait_time = AUDIT_BACKLOG_WAIT_TIME;
 static u32     audit_backlog_wait_overflow = 0;
 
@@ -338,13 +340,13 @@ static int audit_set_backlog_limit(u32 limit)
 static int audit_set_backlog_wait_time(u32 timeout)
 {
        return audit_do_config_change("audit_backlog_wait_time",
-                                     &audit_backlog_wait_time, timeout);
+                                     &audit_backlog_wait_time_master, timeout);
 }
 
 static int audit_set_enabled(u32 state)
 {
        int rc;
-       if (state < AUDIT_OFF || state > AUDIT_LOCKED)
+       if (state > AUDIT_LOCKED)
                return -EINVAL;
 
        rc =  audit_do_config_change("audit_enabled", &audit_enabled, state);
@@ -663,7 +665,7 @@ static int audit_netlink_ok(struct sk_buff *skb, u16 
msg_type)
        case AUDIT_MAKE_EQUIV:
                /* Only support auditd and auditctl in initial pid namespace
                 * for now. */
-               if ((task_active_pid_ns(current) != &init_pid_ns))
+               if (task_active_pid_ns(current) != &init_pid_ns)
                        return -EPERM;
 
                if (!netlink_capable(skb, CAP_AUDIT_CONTROL))
@@ -834,7 +836,7 @@ static int audit_receive_msg(struct sk_buff *skb, struct 
nlmsghdr *nlh)
                s.lost                  = atomic_read(&audit_lost);
                s.backlog               = skb_queue_len(&audit_skb_queue);
                s.feature_bitmap        = AUDIT_FEATURE_BITMAP_ALL;
-               s.backlog_wait_time     = audit_backlog_wait_time;
+               s.backlog_wait_time     = audit_backlog_wait_time_master;
                audit_send_reply(skb, seq, AUDIT_GET, 0, 0, &s, sizeof(s));
                break;
        }
@@ -877,8 +879,7 @@ static int audit_receive_msg(struct sk_buff *skb, struct 
nlmsghdr *nlh)
                if (s.mask & AUDIT_STATUS_BACKLOG_WAIT_TIME) {
                        if (sizeof(s) > (size_t)nlh->nlmsg_len)
                                return -EINVAL;
-                       if (s.backlog_wait_time < 0 ||
-                           s.backlog_wait_time > 10*AUDIT_BACKLOG_WAIT_TIME)
+                       if (s.backlog_wait_time > 10*AUDIT_BACKLOG_WAIT_TIME)
                                return -EINVAL;
                        err = audit_set_backlog_wait_time(s.backlog_wait_time);
                        if (err < 0)
@@ -1385,7 +1386,8 @@ struct audit_buffer *audit_log_start(struct audit_context 
*ctx, gfp_t gfp_mask,
                return NULL;
        }
 
-       audit_backlog_wait_time = AUDIT_BACKLOG_WAIT_TIME;
+       if (!reserve)
+               audit_backlog_wait_time = audit_backlog_wait_time_master;
 
        ab = audit_buffer_alloc(ctx, gfp_mask, type);
        if (!ab) {
@@ -1759,7 +1761,7 @@ void audit_log_name(struct audit_context *context, struct 
audit_names *n,
        } else
                audit_log_format(ab, " name=(null)");
 
-       if (n->ino != (unsigned long)-1) {
+       if (n->ino != (unsigned long)-1)
                audit_log_format(ab, " inode=%lu"
                                 " dev=%02x:%02x mode=%#ho"
                                 " ouid=%u ogid=%u rdev=%02x:%02x",
@@ -1771,7 +1773,6 @@ void audit_log_name(struct audit_context *context, struct 
audit_names *n,
                                 from_kgid(&init_user_ns, n->gid),
                                 MAJOR(n->rdev),
                                 MINOR(n->rdev));
-       }
        if (n->osid != 0) {
                char *ctx = NULL;
                u32 len;
@@ -1838,11 +1839,29 @@ error_path:
 }
 EXPORT_SYMBOL(audit_log_task_context);
 
+void audit_log_d_path_exe(struct audit_buffer *ab,
+                         struct mm_struct *mm)
+{
+       struct file *exe_file;
+
+       if (!mm)
+               goto out_null;
+
+       exe_file = get_mm_exe_file(mm);
+       if (!exe_file)
+               goto out_null;
+
+       audit_log_d_path(ab, " exe=", &exe_file->f_path);
+       fput(exe_file);
+       return;
+out_null:
+       audit_log_format(ab, " exe=(null)");
+}
+
 void audit_log_task_info(struct audit_buffer *ab, struct task_struct *tsk)
 {
        const struct cred *cred;
        char comm[sizeof(tsk->comm)];
-       struct mm_struct *mm = tsk->mm;
        char *tty;
 
        if (!ab)
@@ -1878,13 +1897,7 @@ void audit_log_task_info(struct audit_buffer *ab, struct 
task_struct *tsk)
        audit_log_format(ab, " comm=");
        audit_log_untrustedstring(ab, get_task_comm(comm, tsk));
 
-       if (mm) {
-               down_read(&mm->mmap_sem);
-               if (mm->exe_file)
-                       audit_log_d_path(ab, " exe=", &mm->exe_file->f_path);
-               up_read(&mm->mmap_sem);
-       } else
-               audit_log_format(ab, " exe=(null)");
+       audit_log_d_path_exe(ab, tsk->mm);
        audit_log_task_context(ab);
 }
 EXPORT_SYMBOL(audit_log_task_info);
diff --git a/kernel/audit.h b/kernel/audit.h
index 1caa0d3..d641f9b 100644
--- a/kernel/audit.h
+++ b/kernel/audit.h
@@ -257,6 +257,9 @@ extern struct list_head audit_filter_list[];
 
 extern struct audit_entry *audit_dupe_rule(struct audit_krule *old);
 
+extern void audit_log_d_path_exe(struct audit_buffer *ab,
+                                struct mm_struct *mm);
+
 /* audit watch functions */
 #ifdef CONFIG_AUDIT_WATCH
 extern void audit_put_watch(struct audit_watch *watch);
diff --git a/kernel/audit_tree.c b/kernel/audit_tree.c
index 2e0c974..71fd1f2 100644
--- a/kernel/audit_tree.c
+++ b/kernel/audit_tree.c
@@ -37,6 +37,7 @@ struct audit_chunk {
 
 static LIST_HEAD(tree_list);
 static LIST_HEAD(prune_list);
+static struct task_struct *prune_thread;
 
 /*
  * One struct chunk is attached to each inode of interest.
@@ -651,6 +652,57 @@ static int tag_mount(struct vfsmount *mnt, void *arg)
        return tag_chunk(mnt->mnt_root->d_inode, arg);
 }
 
+/*
+ * That gets run when evict_chunk() ends up needing to kill audit_tree.
+ * Runs from a separate thread.
+ */
+static int prune_tree_thread(void *unused)
+{
+       for (;;) {
+               set_current_state(TASK_INTERRUPTIBLE);
+               if (list_empty(&prune_list))
+                       schedule();
+               __set_current_state(TASK_RUNNING);
+
+               mutex_lock(&audit_cmd_mutex);
+               mutex_lock(&audit_filter_mutex);
+
+               while (!list_empty(&prune_list)) {
+                       struct audit_tree *victim;
+
+                       victim = list_entry(prune_list.next,
+                                       struct audit_tree, list);
+                       list_del_init(&victim->list);
+
+                       mutex_unlock(&audit_filter_mutex);
+
+                       prune_one(victim);
+
+                       mutex_lock(&audit_filter_mutex);
+               }
+
+               mutex_unlock(&audit_filter_mutex);
+               mutex_unlock(&audit_cmd_mutex);
+       }
+       return 0;
+}
+
+static int audit_launch_prune(void)
+{
+       if (prune_thread)
+               return 0;
+       prune_thread = kthread_create(prune_tree_thread, NULL,
+                               "audit_prune_tree");
+       if (IS_ERR(prune_thread)) {
+               pr_err("cannot start thread audit_prune_tree");
+               prune_thread = NULL;
+               return -ENOMEM;
+       } else {
+               wake_up_process(prune_thread);
+               return 0;
+       }
+}
+
 /* called with audit_filter_mutex */
 int audit_add_tree_rule(struct audit_krule *rule)
 {
@@ -674,6 +726,12 @@ int audit_add_tree_rule(struct audit_krule *rule)
        /* do not set rule->tree yet */
        mutex_unlock(&audit_filter_mutex);
 
+       if (unlikely(!prune_thread)) {
+               err = audit_launch_prune();
+               if (err)
+                       goto Err;
+       }
+
        err = kern_path(tree->pathname, 0, &path);
        if (err)
                goto Err;
@@ -811,36 +869,10 @@ int audit_tag_tree(char *old, char *new)
        return failed;
 }
 
-/*
- * That gets run when evict_chunk() ends up needing to kill audit_tree.
- * Runs from a separate thread.
- */
-static int prune_tree_thread(void *unused)
-{
-       mutex_lock(&audit_cmd_mutex);
-       mutex_lock(&audit_filter_mutex);
-
-       while (!list_empty(&prune_list)) {
-               struct audit_tree *victim;
-
-               victim = list_entry(prune_list.next, struct audit_tree, list);
-               list_del_init(&victim->list);
-
-               mutex_unlock(&audit_filter_mutex);
-
-               prune_one(victim);
-
-               mutex_lock(&audit_filter_mutex);
-       }
-
-       mutex_unlock(&audit_filter_mutex);
-       mutex_unlock(&audit_cmd_mutex);
-       return 0;
-}
 
 static void audit_schedule_prune(void)
 {
-       kthread_run(prune_tree_thread, NULL, "audit_prune_tree");
+       wake_up_process(prune_thread);
 }
 
 /*
@@ -907,9 +939,9 @@ static void evict_chunk(struct audit_chunk *chunk)
        for (n = 0; n < chunk->count; n++)
                list_del_init(&chunk->owners[n].list);
        spin_unlock(&hash_lock);
+       mutex_unlock(&audit_filter_mutex);
        if (need_prune)
                audit_schedule_prune();
-       mutex_unlock(&audit_filter_mutex);
 }
 
 static int audit_tree_handle_event(struct fsnotify_group *group,
diff --git a/kernel/auditsc.c b/kernel/auditsc.c
index dc4ae70..84c74d0 100644
--- a/kernel/auditsc.c
+++ b/kernel/auditsc.c
@@ -2361,7 +2361,6 @@ static void audit_log_task(struct audit_buffer *ab)
        kuid_t auid, uid;
        kgid_t gid;
        unsigned int sessionid;
-       struct mm_struct *mm = current->mm;
        char comm[sizeof(current->comm)];
 
        auid = audit_get_loginuid(current);
@@ -2376,13 +2375,7 @@ static void audit_log_task(struct audit_buffer *ab)
        audit_log_task_context(ab);
        audit_log_format(ab, " pid=%d comm=", task_pid_nr(current));
        audit_log_untrustedstring(ab, get_task_comm(comm, current));
-       if (mm) {
-               down_read(&mm->mmap_sem);
-               if (mm->exe_file)
-                       audit_log_d_path(ab, " exe=", &mm->exe_file->f_path);
-               up_read(&mm->mmap_sem);
-       } else
-               audit_log_format(ab, " exe=(null)");
+       audit_log_d_path_exe(ab, current->mm);
 }
 
 /**
-- 
2.3.6

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to