Linux v3.14.1
This commit is contained in:
parent
b126fec5d0
commit
b1bf9ea7da
|
@ -1,8 +1,8 @@
|
|||
From 555b84220a7c84c2faa1964d19733d867d7bf61f Mon Sep 17 00:00:00 2001
|
||||
From 1d9820da2ba6e2794a283d709caf710d0a546b3c Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Thu, 10 Apr 2014 11:36:14 +0200
|
||||
Subject: [PATCH v3] synaptics: Add min/max quirk for ThinkPad T431s, L440,
|
||||
L540, S1 Yoga and X1
|
||||
Subject: [PATCH] synaptics: Add min/max quirk for ThinkPad T431s, L440, S1
|
||||
Yoga and X1
|
||||
|
||||
We expect that all the Haswell series will need such quirks, sigh.
|
||||
|
||||
|
@ -14,24 +14,20 @@ The X1 Carbon 3rd generation name says 2nd while it is a 3rd generation.
|
|||
The X1 and T431s share a PnPID with the T540p, but the reported ranges are
|
||||
closer to those of the T440s.
|
||||
|
||||
HdG: Squashed 5 quirk patches into one. T431s + L440 + L540 are written by me,
|
||||
HdG: Squashed 4 quirk patches into one. T431s + L440 are written by me,
|
||||
S1 Yoga and X1 are written by Benjamin Tissoires.
|
||||
|
||||
Hdg: Standardized S1 Yoga and X1 values, Yoga uses the same touchpad as the
|
||||
X240, X1 uses the same touchpad as the T440.
|
||||
|
||||
Cc: stable@vger.kernel.org
|
||||
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
---
|
||||
drivers/input/mouse/synaptics.c | 42 +++++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 42 insertions(+)
|
||||
drivers/input/mouse/synaptics.c | 34 ++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 34 insertions(+)
|
||||
|
||||
diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
|
||||
index a8b57d7..7c9f509 100644
|
||||
index b9d2259..521a8e7 100644
|
||||
--- a/drivers/input/mouse/synaptics.c
|
||||
+++ b/drivers/input/mouse/synaptics.c
|
||||
@@ -1566,6 +1566,14 @@ static const struct dmi_system_id min_max_dmi_table[] __initconst = {
|
||||
@@ -1557,6 +1557,14 @@ static const struct dmi_system_id min_max_dmi_table[] __initconst = {
|
||||
.driver_data = (int []){1232, 5710, 1156, 4696},
|
||||
},
|
||||
{
|
||||
|
@ -46,7 +42,7 @@ index a8b57d7..7c9f509 100644
|
|||
/* Lenovo ThinkPad T440s */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
||||
@@ -1574,6 +1582,14 @@ static const struct dmi_system_id min_max_dmi_table[] __initconst = {
|
||||
@@ -1565,6 +1573,14 @@ static const struct dmi_system_id min_max_dmi_table[] __initconst = {
|
||||
.driver_data = (int []){1024, 5112, 2024, 4832},
|
||||
},
|
||||
{
|
||||
|
@ -61,26 +57,18 @@ index a8b57d7..7c9f509 100644
|
|||
/* Lenovo ThinkPad T540p */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
||||
@@ -1581,6 +1597,32 @@ static const struct dmi_system_id min_max_dmi_table[] __initconst = {
|
||||
@@ -1572,6 +1588,24 @@ static const struct dmi_system_id min_max_dmi_table[] __initconst = {
|
||||
},
|
||||
.driver_data = (int []){1024, 5056, 2058, 4832},
|
||||
},
|
||||
+ {
|
||||
+ /* Lenovo ThinkPad L540 */
|
||||
+ .matches = {
|
||||
+ DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
||||
+ DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad L540"),
|
||||
+ },
|
||||
+ .driver_data = (int []){1024, 5112, 2024, 4832},
|
||||
+ },
|
||||
+ {
|
||||
+ /* Lenovo Yoga S1 */
|
||||
+ .matches = {
|
||||
+ DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
||||
+ DMI_EXACT_MATCH(DMI_PRODUCT_VERSION,
|
||||
+ "ThinkPad S1 Yoga"),
|
||||
+ },
|
||||
+ .driver_data = (int []){1232, 5710, 1156, 4696},
|
||||
+ .driver_data = (int []){1232, 5711, 1159, 4700},
|
||||
+ },
|
||||
+ {
|
||||
+ /* Lenovo ThinkPad X1 Carbon Haswell (3rd generation) */
|
||||
|
@ -89,7 +77,7 @@ index a8b57d7..7c9f509 100644
|
|||
+ DMI_MATCH(DMI_PRODUCT_VERSION,
|
||||
+ "ThinkPad X1 Carbon 2nd"),
|
||||
+ },
|
||||
+ .driver_data = (int []){1024, 5112, 2024, 4832},
|
||||
+ .driver_data = (int []){1131, 5113, 2021, 4831},
|
||||
+ },
|
||||
#endif
|
||||
{ }
|
||||
|
|
|
@ -1,95 +0,0 @@
|
|||
Bugzilla: 1027465
|
||||
Upstream-status: 3.14
|
||||
|
||||
From a4b1b5877b514b276f0f31efe02388a9c2836728 Mon Sep 17 00:00:00 2001
|
||||
From: David Herrmann <dh.herrmann@gmail.com>
|
||||
Date: Thu, 19 Dec 2013 12:09:32 +0100
|
||||
Subject: [PATCH] HID: Bluetooth: hidp: make sure input buffers are big enough
|
||||
|
||||
HID core expects the input buffers to be at least of size 4096
|
||||
(HID_MAX_BUFFER_SIZE). Other sizes will result in buffer-overflows if an
|
||||
input-report is smaller than advertised. We could, like i2c, compute the
|
||||
biggest report-size instead of using HID_MAX_BUFFER_SIZE, but this will
|
||||
blow up if report-descriptors are changed after ->start() has been called.
|
||||
So lets be safe and just use the biggest buffer we have.
|
||||
|
||||
Note that this adds an additional copy to the HIDP input path. If there is
|
||||
a way to make sure the skb-buf is big enough, we should use that instead.
|
||||
|
||||
The best way would be to make hid-core honor the @size argument, though,
|
||||
that sounds easier than it is. So lets just fix the buffer-overflows for
|
||||
now and afterwards look for a faster way for all transport drivers.
|
||||
|
||||
Signed-off-by: David Herrmann <dh.herrmann@gmail.com>
|
||||
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
|
||||
---
|
||||
net/bluetooth/hidp/core.c | 16 ++++++++++++++--
|
||||
net/bluetooth/hidp/hidp.h | 4 ++++
|
||||
2 files changed, 18 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/net/bluetooth/hidp/core.c b/net/bluetooth/hidp/core.c
|
||||
index 292e619..d9fb934 100644
|
||||
--- a/net/bluetooth/hidp/core.c
|
||||
+++ b/net/bluetooth/hidp/core.c
|
||||
@@ -430,6 +430,16 @@ static void hidp_del_timer(struct hidp_session *session)
|
||||
del_timer(&session->timer);
|
||||
}
|
||||
|
||||
+static void hidp_process_report(struct hidp_session *session,
|
||||
+ int type, const u8 *data, int len, int intr)
|
||||
+{
|
||||
+ if (len > HID_MAX_BUFFER_SIZE)
|
||||
+ len = HID_MAX_BUFFER_SIZE;
|
||||
+
|
||||
+ memcpy(session->input_buf, data, len);
|
||||
+ hid_input_report(session->hid, type, session->input_buf, len, intr);
|
||||
+}
|
||||
+
|
||||
static void hidp_process_handshake(struct hidp_session *session,
|
||||
unsigned char param)
|
||||
{
|
||||
@@ -502,7 +512,8 @@ static int hidp_process_data(struct hidp_session *session, struct sk_buff *skb,
|
||||
hidp_input_report(session, skb);
|
||||
|
||||
if (session->hid)
|
||||
- hid_input_report(session->hid, HID_INPUT_REPORT, skb->data, skb->len, 0);
|
||||
+ hidp_process_report(session, HID_INPUT_REPORT,
|
||||
+ skb->data, skb->len, 0);
|
||||
break;
|
||||
|
||||
case HIDP_DATA_RTYPE_OTHER:
|
||||
@@ -584,7 +595,8 @@ static void hidp_recv_intr_frame(struct hidp_session *session,
|
||||
hidp_input_report(session, skb);
|
||||
|
||||
if (session->hid) {
|
||||
- hid_input_report(session->hid, HID_INPUT_REPORT, skb->data, skb->len, 1);
|
||||
+ hidp_process_report(session, HID_INPUT_REPORT,
|
||||
+ skb->data, skb->len, 1);
|
||||
BT_DBG("report len %d", skb->len);
|
||||
}
|
||||
} else {
|
||||
diff --git a/net/bluetooth/hidp/hidp.h b/net/bluetooth/hidp/hidp.h
|
||||
index ab52414..8798492 100644
|
||||
--- a/net/bluetooth/hidp/hidp.h
|
||||
+++ b/net/bluetooth/hidp/hidp.h
|
||||
@@ -24,6 +24,7 @@
|
||||
#define __HIDP_H
|
||||
|
||||
#include <linux/types.h>
|
||||
+#include <linux/hid.h>
|
||||
#include <linux/kref.h>
|
||||
#include <net/bluetooth/bluetooth.h>
|
||||
#include <net/bluetooth/l2cap.h>
|
||||
@@ -179,6 +180,9 @@ struct hidp_session {
|
||||
|
||||
/* Used in hidp_output_raw_report() */
|
||||
int output_report_success; /* boolean */
|
||||
+
|
||||
+ /* temporary input buffer */
|
||||
+ u8 input_buf[HID_MAX_BUFFER_SIZE];
|
||||
};
|
||||
|
||||
/* HIDP init defines */
|
||||
--
|
||||
1.8.5.3
|
||||
|
|
@ -1,348 +0,0 @@
|
|||
Bugzilla: 953211
|
||||
Upstream-status: Queued for 3.14
|
||||
|
||||
From 4081924b7b6ce876fdb8e8049f1a5ba9c1496483 Mon Sep 17 00:00:00 2001
|
||||
From: Yunkang Tang <tommywill2011@gmail.com>
|
||||
Date: Thu, 26 Dec 2013 14:54:19 -0800
|
||||
Subject: [PATCH] Input: ALPS - add support for "Dolphin" devices
|
||||
|
||||
This adds support for another flavor of ALPS protocol used in newer
|
||||
"Dolphin" devices.
|
||||
|
||||
Signed-off-by: Yunkang Tang <yunkang.tang@cn.alps.com>
|
||||
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
|
||||
---
|
||||
drivers/input/mouse/alps.c | 214 ++++++++++++++++++++++++++++++++++++---------
|
||||
drivers/input/mouse/alps.h | 7 +-
|
||||
2 files changed, 179 insertions(+), 42 deletions(-)
|
||||
|
||||
diff --git a/drivers/input/mouse/alps.c b/drivers/input/mouse/alps.c
|
||||
index 5cf62e3..fb15c64 100644
|
||||
--- a/drivers/input/mouse/alps.c
|
||||
+++ b/drivers/input/mouse/alps.c
|
||||
@@ -277,6 +277,57 @@ static void alps_process_packet_v1_v2(struct psmouse *psmouse)
|
||||
}
|
||||
|
||||
/*
|
||||
+ * Process bitmap data for V5 protocols. Return value is null.
|
||||
+ *
|
||||
+ * The bitmaps don't have enough data to track fingers, so this function
|
||||
+ * only generates points representing a bounding box of at most two contacts.
|
||||
+ * These two points are returned in x1, y1, x2, and y2.
|
||||
+ */
|
||||
+static void alps_process_bitmap_dolphin(struct alps_data *priv,
|
||||
+ struct alps_fields *fields,
|
||||
+ int *x1, int *y1, int *x2, int *y2)
|
||||
+{
|
||||
+ int box_middle_x, box_middle_y;
|
||||
+ unsigned int x_map, y_map;
|
||||
+ unsigned char start_bit, end_bit;
|
||||
+ unsigned char x_msb, x_lsb, y_msb, y_lsb;
|
||||
+
|
||||
+ x_map = fields->x_map;
|
||||
+ y_map = fields->y_map;
|
||||
+
|
||||
+ if (!x_map || !y_map)
|
||||
+ return;
|
||||
+
|
||||
+ /* Get Most-significant and Least-significant bit */
|
||||
+ x_msb = fls(x_map);
|
||||
+ x_lsb = ffs(x_map);
|
||||
+ y_msb = fls(y_map);
|
||||
+ y_lsb = ffs(y_map);
|
||||
+
|
||||
+ /* Most-significant bit should never exceed max sensor line number */
|
||||
+ if (x_msb > priv->x_bits || y_msb > priv->y_bits)
|
||||
+ return;
|
||||
+
|
||||
+ *x1 = *y1 = *x2 = *y2 = 0;
|
||||
+
|
||||
+ if (fields->fingers > 1) {
|
||||
+ start_bit = priv->x_bits - x_msb;
|
||||
+ end_bit = priv->x_bits - x_lsb;
|
||||
+ box_middle_x = (priv->x_max * (start_bit + end_bit)) /
|
||||
+ (2 * (priv->x_bits - 1));
|
||||
+
|
||||
+ start_bit = y_lsb - 1;
|
||||
+ end_bit = y_msb - 1;
|
||||
+ box_middle_y = (priv->y_max * (start_bit + end_bit)) /
|
||||
+ (2 * (priv->y_bits - 1));
|
||||
+ *x1 = fields->x;
|
||||
+ *y1 = fields->y;
|
||||
+ *x2 = 2 * box_middle_x - *x1;
|
||||
+ *y2 = 2 * box_middle_y - *y1;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
* Process bitmap data from v3 and v4 protocols. Returns the number of
|
||||
* fingers detected. A return value of 0 means at least one of the
|
||||
* bitmaps was empty.
|
||||
@@ -481,7 +532,8 @@ static void alps_decode_buttons_v3(struct alps_fields *f, unsigned char *p)
|
||||
f->ts_middle = !!(p[3] & 0x40);
|
||||
}
|
||||
|
||||
-static void alps_decode_pinnacle(struct alps_fields *f, unsigned char *p)
|
||||
+static void alps_decode_pinnacle(struct alps_fields *f, unsigned char *p,
|
||||
+ struct psmouse *psmouse)
|
||||
{
|
||||
f->first_mp = !!(p[4] & 0x40);
|
||||
f->is_mp = !!(p[0] & 0x40);
|
||||
@@ -502,48 +554,61 @@ static void alps_decode_pinnacle(struct alps_fields *f, unsigned char *p)
|
||||
alps_decode_buttons_v3(f, p);
|
||||
}
|
||||
|
||||
-static void alps_decode_rushmore(struct alps_fields *f, unsigned char *p)
|
||||
+static void alps_decode_rushmore(struct alps_fields *f, unsigned char *p,
|
||||
+ struct psmouse *psmouse)
|
||||
{
|
||||
- alps_decode_pinnacle(f, p);
|
||||
+ alps_decode_pinnacle(f, p, psmouse);
|
||||
|
||||
f->x_map |= (p[5] & 0x10) << 11;
|
||||
f->y_map |= (p[5] & 0x20) << 6;
|
||||
}
|
||||
|
||||
-static void alps_decode_dolphin(struct alps_fields *f, unsigned char *p)
|
||||
+static void alps_decode_dolphin(struct alps_fields *f, unsigned char *p,
|
||||
+ struct psmouse *psmouse)
|
||||
{
|
||||
+ u64 palm_data = 0;
|
||||
+ struct alps_data *priv = psmouse->private;
|
||||
+
|
||||
f->first_mp = !!(p[0] & 0x02);
|
||||
f->is_mp = !!(p[0] & 0x20);
|
||||
|
||||
- f->fingers = ((p[0] & 0x6) >> 1 |
|
||||
+ if (!f->is_mp) {
|
||||
+ f->x = ((p[1] & 0x7f) | ((p[4] & 0x0f) << 7));
|
||||
+ f->y = ((p[2] & 0x7f) | ((p[4] & 0xf0) << 3));
|
||||
+ f->z = (p[0] & 4) ? 0 : p[5] & 0x7f;
|
||||
+ alps_decode_buttons_v3(f, p);
|
||||
+ } else {
|
||||
+ f->fingers = ((p[0] & 0x6) >> 1 |
|
||||
(p[0] & 0x10) >> 2);
|
||||
- f->x_map = ((p[2] & 0x60) >> 5) |
|
||||
- ((p[4] & 0x7f) << 2) |
|
||||
- ((p[5] & 0x7f) << 9) |
|
||||
- ((p[3] & 0x07) << 16) |
|
||||
- ((p[3] & 0x70) << 15) |
|
||||
- ((p[0] & 0x01) << 22);
|
||||
- f->y_map = (p[1] & 0x7f) |
|
||||
- ((p[2] & 0x1f) << 7);
|
||||
-
|
||||
- f->x = ((p[1] & 0x7f) | ((p[4] & 0x0f) << 7));
|
||||
- f->y = ((p[2] & 0x7f) | ((p[4] & 0xf0) << 3));
|
||||
- f->z = (p[0] & 4) ? 0 : p[5] & 0x7f;
|
||||
|
||||
- alps_decode_buttons_v3(f, p);
|
||||
+ palm_data = (p[1] & 0x7f) |
|
||||
+ ((p[2] & 0x7f) << 7) |
|
||||
+ ((p[4] & 0x7f) << 14) |
|
||||
+ ((p[5] & 0x7f) << 21) |
|
||||
+ ((p[3] & 0x07) << 28) |
|
||||
+ (((u64)p[3] & 0x70) << 27) |
|
||||
+ (((u64)p[0] & 0x01) << 34);
|
||||
+
|
||||
+ /* Y-profile is stored in P(0) to p(n-1), n = y_bits; */
|
||||
+ f->y_map = palm_data & (BIT(priv->y_bits) - 1);
|
||||
+
|
||||
+ /* X-profile is stored in p(n) to p(n+m-1), m = x_bits; */
|
||||
+ f->x_map = (palm_data >> priv->y_bits) &
|
||||
+ (BIT(priv->x_bits) - 1);
|
||||
+ }
|
||||
}
|
||||
|
||||
-static void alps_process_touchpad_packet_v3(struct psmouse *psmouse)
|
||||
+static void alps_process_touchpad_packet_v3_v5(struct psmouse *psmouse)
|
||||
{
|
||||
struct alps_data *priv = psmouse->private;
|
||||
unsigned char *packet = psmouse->packet;
|
||||
struct input_dev *dev = psmouse->dev;
|
||||
struct input_dev *dev2 = priv->dev2;
|
||||
int x1 = 0, y1 = 0, x2 = 0, y2 = 0;
|
||||
- int fingers = 0, bmap_fingers;
|
||||
- struct alps_fields f;
|
||||
+ int fingers = 0, bmap_fn;
|
||||
+ struct alps_fields f = {0};
|
||||
|
||||
- priv->decode_fields(&f, packet);
|
||||
+ priv->decode_fields(&f, packet, psmouse);
|
||||
|
||||
/*
|
||||
* There's no single feature of touchpad position and bitmap packets
|
||||
@@ -560,19 +625,38 @@ static void alps_process_touchpad_packet_v3(struct psmouse *psmouse)
|
||||
*/
|
||||
if (f.is_mp) {
|
||||
fingers = f.fingers;
|
||||
- bmap_fingers = alps_process_bitmap(priv,
|
||||
- f.x_map, f.y_map,
|
||||
- &x1, &y1, &x2, &y2);
|
||||
-
|
||||
- /*
|
||||
- * We shouldn't report more than one finger if
|
||||
- * we don't have two coordinates.
|
||||
- */
|
||||
- if (fingers > 1 && bmap_fingers < 2)
|
||||
- fingers = bmap_fingers;
|
||||
-
|
||||
- /* Now process position packet */
|
||||
- priv->decode_fields(&f, priv->multi_data);
|
||||
+ if (priv->proto_version == ALPS_PROTO_V3) {
|
||||
+ bmap_fn = alps_process_bitmap(priv, f.x_map,
|
||||
+ f.y_map, &x1, &y1,
|
||||
+ &x2, &y2);
|
||||
+
|
||||
+ /*
|
||||
+ * We shouldn't report more than one finger if
|
||||
+ * we don't have two coordinates.
|
||||
+ */
|
||||
+ if (fingers > 1 && bmap_fn < 2)
|
||||
+ fingers = bmap_fn;
|
||||
+
|
||||
+ /* Now process position packet */
|
||||
+ priv->decode_fields(&f, priv->multi_data,
|
||||
+ psmouse);
|
||||
+ } else {
|
||||
+ /*
|
||||
+ * Because Dolphin uses position packet's
|
||||
+ * coordinate data as Pt1 and uses it to
|
||||
+ * calculate Pt2, so we need to do position
|
||||
+ * packet decode first.
|
||||
+ */
|
||||
+ priv->decode_fields(&f, priv->multi_data,
|
||||
+ psmouse);
|
||||
+
|
||||
+ /*
|
||||
+ * Since Dolphin's finger number is reliable,
|
||||
+ * there is no need to compare with bmap_fn.
|
||||
+ */
|
||||
+ alps_process_bitmap_dolphin(priv, &f, &x1, &y1,
|
||||
+ &x2, &y2);
|
||||
+ }
|
||||
} else {
|
||||
priv->multi_packet = 0;
|
||||
}
|
||||
@@ -662,7 +746,7 @@ static void alps_process_packet_v3(struct psmouse *psmouse)
|
||||
return;
|
||||
}
|
||||
|
||||
- alps_process_touchpad_packet_v3(psmouse);
|
||||
+ alps_process_touchpad_packet_v3_v5(psmouse);
|
||||
}
|
||||
|
||||
static void alps_process_packet_v6(struct psmouse *psmouse)
|
||||
@@ -1709,6 +1793,52 @@ error:
|
||||
return -1;
|
||||
}
|
||||
|
||||
+static int alps_dolphin_get_device_area(struct psmouse *psmouse,
|
||||
+ struct alps_data *priv)
|
||||
+{
|
||||
+ struct ps2dev *ps2dev = &psmouse->ps2dev;
|
||||
+ unsigned char param[4] = {0};
|
||||
+ int num_x_electrode, num_y_electrode;
|
||||
+
|
||||
+ if (alps_enter_command_mode(psmouse))
|
||||
+ return -1;
|
||||
+
|
||||
+ param[0] = 0x0a;
|
||||
+ if (ps2_command(ps2dev, NULL, PSMOUSE_CMD_RESET_WRAP) ||
|
||||
+ ps2_command(ps2dev, NULL, PSMOUSE_CMD_SETPOLL) ||
|
||||
+ ps2_command(ps2dev, NULL, PSMOUSE_CMD_SETPOLL) ||
|
||||
+ ps2_command(ps2dev, ¶m[0], PSMOUSE_CMD_SETRATE) ||
|
||||
+ ps2_command(ps2dev, ¶m[0], PSMOUSE_CMD_SETRATE))
|
||||
+ return -1;
|
||||
+
|
||||
+ if (ps2_command(ps2dev, param, PSMOUSE_CMD_GETINFO))
|
||||
+ return -1;
|
||||
+
|
||||
+ /*
|
||||
+ * Dolphin's sensor line number is not fixed. It can be calculated
|
||||
+ * by adding the device's register value with DOLPHIN_PROFILE_X/YOFFSET.
|
||||
+ * Further more, we can get device's x_max and y_max by multiplying
|
||||
+ * sensor line number with DOLPHIN_COUNT_PER_ELECTRODE.
|
||||
+ *
|
||||
+ * e.g. When we get register's sensor_x = 11 & sensor_y = 8,
|
||||
+ * real sensor line number X = 11 + 8 = 19, and
|
||||
+ * real sensor line number Y = 8 + 1 = 9.
|
||||
+ * So, x_max = (19 - 1) * 64 = 1152, and
|
||||
+ * y_max = (9 - 1) * 64 = 512.
|
||||
+ */
|
||||
+ num_x_electrode = DOLPHIN_PROFILE_XOFFSET + (param[2] & 0x0F);
|
||||
+ num_y_electrode = DOLPHIN_PROFILE_YOFFSET + ((param[2] >> 4) & 0x0F);
|
||||
+ priv->x_bits = num_x_electrode;
|
||||
+ priv->y_bits = num_y_electrode;
|
||||
+ priv->x_max = (num_x_electrode - 1) * DOLPHIN_COUNT_PER_ELECTRODE;
|
||||
+ priv->y_max = (num_y_electrode - 1) * DOLPHIN_COUNT_PER_ELECTRODE;
|
||||
+
|
||||
+ if (alps_exit_command_mode(psmouse))
|
||||
+ return -1;
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static int alps_hw_init_dolphin_v1(struct psmouse *psmouse)
|
||||
{
|
||||
struct ps2dev *ps2dev = &psmouse->ps2dev;
|
||||
@@ -1763,13 +1893,13 @@ static void alps_set_defaults(struct alps_data *priv)
|
||||
break;
|
||||
case ALPS_PROTO_V5:
|
||||
priv->hw_init = alps_hw_init_dolphin_v1;
|
||||
- priv->process_packet = alps_process_packet_v3;
|
||||
+ priv->process_packet = alps_process_touchpad_packet_v3_v5;
|
||||
priv->decode_fields = alps_decode_dolphin;
|
||||
priv->set_abs_params = alps_set_abs_params_mt;
|
||||
priv->nibble_commands = alps_v3_nibble_commands;
|
||||
priv->addr_command = PSMOUSE_CMD_RESET_WRAP;
|
||||
priv->byte0 = 0xc8;
|
||||
- priv->mask0 = 0xc8;
|
||||
+ priv->mask0 = 0xd8;
|
||||
priv->flags = 0;
|
||||
priv->x_max = 1360;
|
||||
priv->y_max = 660;
|
||||
@@ -1845,11 +1975,13 @@ static int alps_identify(struct psmouse *psmouse, struct alps_data *priv)
|
||||
if (alps_match_table(psmouse, priv, e7, ec) == 0) {
|
||||
return 0;
|
||||
} else if (e7[0] == 0x73 && e7[1] == 0x03 && e7[2] == 0x50 &&
|
||||
- ec[0] == 0x73 && ec[1] == 0x01) {
|
||||
+ ec[0] == 0x73 && (ec[1] == 0x01 || ec[1] == 0x02)) {
|
||||
priv->proto_version = ALPS_PROTO_V5;
|
||||
alps_set_defaults(priv);
|
||||
-
|
||||
- return 0;
|
||||
+ if (alps_dolphin_get_device_area(psmouse, priv))
|
||||
+ return -EIO;
|
||||
+ else
|
||||
+ return 0;
|
||||
} else if (ec[0] == 0x88 && ec[1] == 0x08) {
|
||||
priv->proto_version = ALPS_PROTO_V3;
|
||||
alps_set_defaults(priv);
|
||||
diff --git a/drivers/input/mouse/alps.h b/drivers/input/mouse/alps.h
|
||||
index 704f0f9..03f88b6 100644
|
||||
--- a/drivers/input/mouse/alps.h
|
||||
+++ b/drivers/input/mouse/alps.h
|
||||
@@ -19,6 +19,10 @@
|
||||
#define ALPS_PROTO_V5 5
|
||||
#define ALPS_PROTO_V6 6
|
||||
|
||||
+#define DOLPHIN_COUNT_PER_ELECTRODE 64
|
||||
+#define DOLPHIN_PROFILE_XOFFSET 8 /* x-electrode offset */
|
||||
+#define DOLPHIN_PROFILE_YOFFSET 1 /* y-electrode offset */
|
||||
+
|
||||
/**
|
||||
* struct alps_model_info - touchpad ID table
|
||||
* @signature: E7 response string to match.
|
||||
@@ -146,7 +150,8 @@ struct alps_data {
|
||||
|
||||
int (*hw_init)(struct psmouse *psmouse);
|
||||
void (*process_packet)(struct psmouse *psmouse);
|
||||
- void (*decode_fields)(struct alps_fields *f, unsigned char *p);
|
||||
+ void (*decode_fields)(struct alps_fields *f, unsigned char *p,
|
||||
+ struct psmouse *psmouse);
|
||||
void (*set_abs_params)(struct alps_data *priv, struct input_dev *dev1);
|
||||
|
||||
int prev_fin;
|
||||
--
|
||||
1.8.4.2
|
||||
|
File diff suppressed because it is too large
Load Diff
|
@ -31,14 +31,14 @@ diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
|
|||
index 8081479..5672e91 100644
|
||||
--- a/arch/arm/boot/dts/Makefile
|
||||
+++ b/arch/arm/boot/dts/Makefile
|
||||
@@ -137,6 +137,7 @@
|
||||
@@ -162,6 +162,7 @@ dtb-$(CONFIG_ARCH_MXC) += \
|
||||
imx6dl-sabresd.dtb \
|
||||
imx6dl-wandboard.dtb \
|
||||
imx6q-arm2.dtb \
|
||||
+ imx6q-cm-fx6.dtb \
|
||||
imx6q-cubox-i.dtb \
|
||||
imx6q-phytec-pbab01.dtb \
|
||||
imx6q-sabreauto.dtb \
|
||||
imx6q-sabrelite.dtb \
|
||||
diff --git a/arch/arm/boot/dts/imx6q-cm-fx6.dts b/arch/arm/boot/dts/imx6q-cm-fx6.dts
|
||||
new file mode 100644
|
||||
index 0000000..99b46f8
|
||||
|
@ -152,30 +152,7 @@ index 0000000..99b46f8
|
|||
+ pinctrl-0 = <&pinctrl_uart4>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
commit a26be0f051e03b9676a39799ca64d5888361d70e
|
||||
Author: Sascha Hauer <s.hauer@pengutronix.de>
|
||||
Date: Thu Jan 16 13:44:19 2014 +0100
|
||||
|
||||
ARM: dts: imx6q: Add spi4 alias
|
||||
|
||||
The quad version has a SPI controller more than the other
|
||||
versions. Add an alias for it.
|
||||
|
||||
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
|
||||
Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
|
||||
|
||||
diff --git a/arch/arm/boot/dts/imx6q.dtsi b/arch/arm/boot/dts/imx6q.dtsi
|
||||
index 6295fa8..422d169 100644
|
||||
--- a/arch/arm/boot/dts/imx6q.dtsi
|
||||
+++ b/arch/arm/boot/dts/imx6q.dtsi
|
||||
@@ -13,6 +13,10 @@
|
||||
#include "imx6qdl.dtsi"
|
||||
|
||||
/ {
|
||||
+ aliases {
|
||||
+ spi4 = &ecspi5;
|
||||
+ };
|
||||
+
|
||||
cpus {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
+&sata {
|
||||
+ status = "okay";
|
||||
+};
|
||||
|
|
|
@ -0,0 +1,99 @@
|
|||
From fb4a8356eb67514b10618d1e9e4059ced14c05f2 Mon Sep 17 00:00:00 2001
|
||||
From: Marc Dietrich <marvin24@gmx.de>
|
||||
Date: Sat, 21 Dec 2013 21:38:13 +0100
|
||||
Subject: [PATCH] ARM: tegra: paz00: Add LVDS support to device tree
|
||||
|
||||
Add backlight and panel nodes for the PAZ00 TFT LCD panel.
|
||||
|
||||
Signed-off-by: Marc Dietrich <marvin24@gmx.de>
|
||||
---
|
||||
arch/arm/boot/dts/tegra20-paz00.dts | 46 ++++++++++++++++++++++++++++++++++-
|
||||
1 files changed, 45 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/arch/arm/boot/dts/tegra20-paz00.dts b/arch/arm/boot/dts/tegra20-paz00.dts
|
||||
index c7cd8e6..9a39a80 100644
|
||||
--- a/arch/arm/boot/dts/tegra20-paz00.dts
|
||||
+++ b/arch/arm/boot/dts/tegra20-paz00.dts
|
||||
@@ -17,6 +17,14 @@
|
||||
};
|
||||
|
||||
host1x@50000000 {
|
||||
+ dc@54200000 {
|
||||
+ rgb {
|
||||
+ status = "okay";
|
||||
+
|
||||
+ nvidia,panel = <&panel>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
hdmi@54280000 {
|
||||
status = "okay";
|
||||
|
||||
@@ -257,7 +265,11 @@
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
- i2c@7000c000 {
|
||||
+ pwm: pwm@7000a000 {
|
||||
+ status = "okay";
|
||||
+ };
|
||||
+
|
||||
+ lvds_ddc: i2c@7000c000 {
|
||||
status = "okay";
|
||||
clock-frequency = <400000>;
|
||||
|
||||
@@ -475,6 +487,18 @@
|
||||
non-removable;
|
||||
};
|
||||
|
||||
+ backlight: backlight {
|
||||
+ compatible = "pwm-backlight";
|
||||
+
|
||||
+ enable-gpios = <&gpio TEGRA_GPIO(U, 4) GPIO_ACTIVE_HIGH>;
|
||||
+ pwms = <&pwm 0 5000000>;
|
||||
+
|
||||
+ brightness-levels = <0 16 32 48 64 80 96 112 128 144 160 176 192 208 224 240 255>;
|
||||
+ default-brightness-level = <10>;
|
||||
+
|
||||
+ backlight-boot-off;
|
||||
+ };
|
||||
+
|
||||
clocks {
|
||||
compatible = "simple-bus";
|
||||
#address-cells = <1>;
|
||||
@@ -509,6 +533,16 @@
|
||||
};
|
||||
};
|
||||
|
||||
+ panel: panel {
|
||||
+ compatible = "samsung,ltn101nt05", "simple-panel";
|
||||
+
|
||||
+ ddc-i2c-bus = <&lvds_ddc>;
|
||||
+ power-supply = <&vdd_pnl_reg>;
|
||||
+ enable-gpios = <&gpio TEGRA_GPIO(M, 6) GPIO_ACTIVE_HIGH>;
|
||||
+
|
||||
+ backlight = <&backlight>;
|
||||
+ };
|
||||
+
|
||||
regulators {
|
||||
compatible = "simple-bus";
|
||||
#address-cells = <1>;
|
||||
@@ -522,6 +556,16 @@
|
||||
regulator-max-microvolt = <5000000>;
|
||||
regulator-always-on;
|
||||
};
|
||||
+
|
||||
+ vdd_pnl_reg: regulator@1 {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ reg = <1>;
|
||||
+ regulator-name = "+3VS,vdd_pnl";
|
||||
+ regulator-min-microvolt = <3300000>;
|
||||
+ regulator-max-microvolt = <3300000>;
|
||||
+ gpio = <&gpio TEGRA_GPIO(A, 4) GPIO_ACTIVE_HIGH>;
|
||||
+ enable-active-high;
|
||||
+ };
|
||||
};
|
||||
|
||||
sound {
|
||||
--
|
||||
1.7.1
|
|
@ -1,88 +0,0 @@
|
|||
Path: news.gmane.org!not-for-mail
|
||||
From: Jeff Layton <jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
|
||||
Newsgroups: gmane.linux.kernel.cifs
|
||||
Subject: [PATCH] cifs: mask off top byte in get_rfc1002_length()
|
||||
Date: Tue, 25 Feb 2014 05:27:17 -0800
|
||||
Lines: 31
|
||||
Approved: news@gmane.org
|
||||
Message-ID: <1393334837-6480-1-git-send-email-jlayton@redhat.com>
|
||||
NNTP-Posting-Host: plane.gmane.org
|
||||
X-Trace: ger.gmane.org 1393334843 15695 80.91.229.3 (25 Feb 2014 13:27:23 GMT)
|
||||
X-Complaints-To: usenet@ger.gmane.org
|
||||
NNTP-Posting-Date: Tue, 25 Feb 2014 13:27:23 +0000 (UTC)
|
||||
Cc: klaus-jjkdzbv0JQgAvxtiuMwx3w@public.gmane.org, sprabhu-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org, linux-cifs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
|
||||
To: smfrench-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org
|
||||
Original-X-From: linux-cifs-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Tue Feb 25 14:27:30 2014
|
||||
Return-path: <linux-cifs-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>
|
||||
Envelope-to: glkc-linux-cifs-wOFGN7rlS/M9smdsby/KFg@public.gmane.org
|
||||
Original-Received: from vger.kernel.org ([209.132.180.67])
|
||||
by plane.gmane.org with esmtp (Exim 4.69)
|
||||
(envelope-from <linux-cifs-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>)
|
||||
id 1WII2h-0005Fo-GS
|
||||
for glkc-linux-cifs-wOFGN7rlS/M9smdsby/KFg@public.gmane.org; Tue, 25 Feb 2014 14:27:27 +0100
|
||||
Original-Received: (majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org) by vger.kernel.org via listexpand
|
||||
id S1752439AbaBYN10 (ORCPT <rfc822;glkc-linux-cifs@m.gmane.org>);
|
||||
Tue, 25 Feb 2014 08:27:26 -0500
|
||||
Original-Received: from mail-pa0-f41.google.com ([209.85.220.41]:49339 "EHLO
|
||||
mail-pa0-f41.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org
|
||||
with ESMTP id S1752329AbaBYN10 (ORCPT
|
||||
<rfc822;linux-cifs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>); Tue, 25 Feb 2014 08:27:26 -0500
|
||||
Original-Received: by mail-pa0-f41.google.com with SMTP id fa1so8081181pad.14
|
||||
for <linux-cifs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>; Tue, 25 Feb 2014 05:27:25 -0800 (PST)
|
||||
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
|
||||
d=1e100.net; s=20130820;
|
||||
h=x-gm-message-state:sender:from:to:cc:subject:date:message-id;
|
||||
bh=I4guc46K5w45idU9LGsBcibRE60G/EkhmnDXX8d4lFc=;
|
||||
b=YI5Ag6zKBzcWzALN9+g56fwi/XbV8N9i0JCfbhVRCEv9/JYNUHzVBZ+WO3Wqaf54U/
|
||||
qNNjrH1Io0LpiVTF5+ZuiDEee4Vt8QbMP7iD7rkxh4RZq9clRgum/wVTwV5l/SfIwud7
|
||||
HqGJlJ3jSGtTO4bhBuvX5mD4FrHw4RZJvaWzowzMvYH536b8nZu9typSL4G+KQEV34la
|
||||
19S6ikv1BjtJ49PUS3Gf9xMsqwkJNrLVBauag3yqhztcTSnP5UrxuauSWX0c68R2Lt70
|
||||
hdx5HGMQ0P2wgG6+Qvs3tEl2+infCJkpOH5X7KSvN1pT9hxtt6iE5QGFh5dtUTKe7FlA
|
||||
/grg==
|
||||
X-Gm-Message-State: ALoCoQlVCE5L6UI8IEC9kyuJlrAWBVyYN/eaeZJVp0fm2f2fDE/042yEkI6q9uGoP1vHrftB4/7C
|
||||
X-Received: by 10.69.31.65 with SMTP id kk1mr6563795pbd.47.1393334845726;
|
||||
Tue, 25 Feb 2014 05:27:25 -0800 (PST)
|
||||
Original-Received: from corrin.poochiereds.net.cthon.org (64-71-23-226.static.wiline.com. [64.71.23.226])
|
||||
by mx.google.com with ESMTPSA id eb5sm143431078pad.22.2014.02.25.05.27.24
|
||||
for <multiple recipients>
|
||||
(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
|
||||
Tue, 25 Feb 2014 05:27:25 -0800 (PST)
|
||||
X-Mailer: git-send-email 1.8.5.3
|
||||
Original-Sender: linux-cifs-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
|
||||
Precedence: bulk
|
||||
List-ID: <linux-cifs.vger.kernel.org>
|
||||
X-Mailing-List: linux-cifs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
|
||||
Xref: news.gmane.org gmane.linux.kernel.cifs:9419
|
||||
Archived-At: <http://permalink.gmane.org/gmane.linux.kernel.cifs/9419>
|
||||
|
||||
The 32-bit rfc1002 header field consists of a type byte and then a
|
||||
24-bit length field, but get_rfc1002_length doesn't mask off the top
|
||||
byte.
|
||||
|
||||
In most cases, it's not a problem since the RFC1002_SESSION_MESSAGE type
|
||||
is '\0', but when doing a RFC1002 session establishment, the type is
|
||||
non-zero and that throws off the returned length in smb_send_rqst.
|
||||
|
||||
Reported-by: klaus-jjkdzbv0JQgAvxtiuMwx3w@public.gmane.org
|
||||
Tested-by: Sachin Prabhu <sprabhu-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
|
||||
Signed-off-by: Jeff Layton <jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
|
||||
---
|
||||
fs/cifs/cifsglob.h | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h
|
||||
index e7fe49e..45376a4 100644
|
||||
--- a/fs/cifs/cifsglob.h
|
||||
+++ b/fs/cifs/cifsglob.h
|
||||
@@ -506,7 +506,7 @@ struct cifs_mnt_data {
|
||||
static inline unsigned int
|
||||
get_rfc1002_length(void *buf)
|
||||
{
|
||||
- return be32_to_cpu(*((__be32 *)buf));
|
||||
+ return be32_to_cpu(*((__be32 *)buf)) & 0xffffff;
|
||||
}
|
||||
|
||||
static inline void
|
||||
--
|
||||
1.8.5.3
|
||||
|
|
@ -1,129 +0,0 @@
|
|||
Path: news.gmane.org!not-for-mail
|
||||
From: Jeff Layton <jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
|
||||
Newsgroups: gmane.linux.kernel.cifs
|
||||
Subject: [PATCH] cifs: sanity check length of data to send before sending
|
||||
Date: Fri, 14 Feb 2014 07:21:00 -0500
|
||||
Lines: 72
|
||||
Approved: news@gmane.org
|
||||
Message-ID: <1392380460-6997-1-git-send-email-jlayton@redhat.com>
|
||||
NNTP-Posting-Host: plane.gmane.org
|
||||
X-Trace: ger.gmane.org 1392380460 7637 80.91.229.3 (14 Feb 2014 12:21:00 GMT)
|
||||
X-Complaints-To: usenet@ger.gmane.org
|
||||
NNTP-Posting-Date: Fri, 14 Feb 2014 12:21:00 +0000 (UTC)
|
||||
Cc: linux-cifs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
|
||||
To: smfrench-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org
|
||||
Original-X-From: linux-cifs-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Fri Feb 14 13:21:08 2014
|
||||
Return-path: <linux-cifs-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>
|
||||
Envelope-to: glkc-linux-cifs-wOFGN7rlS/M9smdsby/KFg@public.gmane.org
|
||||
Original-Received: from vger.kernel.org ([209.132.180.67])
|
||||
by plane.gmane.org with esmtp (Exim 4.69)
|
||||
(envelope-from <linux-cifs-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>)
|
||||
id 1WEHlT-0001gj-Pf
|
||||
for glkc-linux-cifs-wOFGN7rlS/M9smdsby/KFg@public.gmane.org; Fri, 14 Feb 2014 13:21:08 +0100
|
||||
Original-Received: (majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org) by vger.kernel.org via listexpand
|
||||
id S1751935AbaBNMVH (ORCPT <rfc822;glkc-linux-cifs@m.gmane.org>);
|
||||
Fri, 14 Feb 2014 07:21:07 -0500
|
||||
Original-Received: from mail-qc0-f170.google.com ([209.85.216.170]:60206 "EHLO
|
||||
mail-qc0-f170.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org
|
||||
with ESMTP id S1751288AbaBNMVG (ORCPT
|
||||
<rfc822;linux-cifs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>); Fri, 14 Feb 2014 07:21:06 -0500
|
||||
Original-Received: by mail-qc0-f170.google.com with SMTP id e9so20306487qcy.29
|
||||
for <linux-cifs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>; Fri, 14 Feb 2014 04:21:05 -0800 (PST)
|
||||
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
|
||||
d=1e100.net; s=20130820;
|
||||
h=x-gm-message-state:sender:from:to:cc:subject:date:message-id;
|
||||
bh=8FvTfO9jKY+Fzw5nmoxw6PuPxfXM/khvtS/Hnxnu+to=;
|
||||
b=i7Gy5AwQiFX7hVMJJMjvAR61u2zO8E7tTAgE0SfPp25untipj/RTae8xcA+0vVrznY
|
||||
sZwOPATUyFmu2mXAKh5L0WutFNF3SQirPVgM5jaKlMZQT253YInioO1AwD00Jtio00LX
|
||||
wOt19I6v3umZfSqCBw1dyDiH66kX4xKaKqdQoY2+nEsicG4RJvp4PpaLhG454nfpVxfN
|
||||
HeskcNJ5RBvg17JpDvKX6THqbKWsHSHHqKKCROERxeTbs7HTgV9jTNSDeOuPr6Loiovi
|
||||
9DBQwQwMmlC9NebDqR5xatva30WRhyCp/xyHNaoY+aVk8N6r5YlFphLmLRvmaZ0Ed2CH
|
||||
17WA==
|
||||
X-Gm-Message-State: ALoCoQmHyaepi0IHvwKS024wRq/srAdGRdo0UGUynLggzf843S3Yj7dwW53RjNbTDG1Y4w+/mqOB
|
||||
X-Received: by 10.229.13.133 with SMTP id c5mr12315963qca.22.1392380465000;
|
||||
Fri, 14 Feb 2014 04:21:05 -0800 (PST)
|
||||
Original-Received: from tlielax.poochiereds.net ([2001:470:8:d63:3a60:77ff:fe93:a95d])
|
||||
by mx.google.com with ESMTPSA id u4sm15047497qai.21.2014.02.14.04.21.04
|
||||
for <multiple recipients>
|
||||
(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
|
||||
Fri, 14 Feb 2014 04:21:04 -0800 (PST)
|
||||
X-Mailer: git-send-email 1.8.5.3
|
||||
Original-Sender: linux-cifs-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
|
||||
Precedence: bulk
|
||||
List-ID: <linux-cifs.vger.kernel.org>
|
||||
X-Mailing-List: linux-cifs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
|
||||
Xref: news.gmane.org gmane.linux.kernel.cifs:9402
|
||||
Archived-At: <http://permalink.gmane.org/gmane.linux.kernel.cifs/9402>
|
||||
|
||||
We had a bug discovered recently where an upper layer function
|
||||
(cifs_iovec_write) could pass down a smb_rqst with an invalid amount of
|
||||
data in it. The length of the SMB frame would be correct, but the rqst
|
||||
struct would cause smb_send_rqst to send nearly 4GB of data.
|
||||
|
||||
This should never be the case. Add some sanity checking to the beginning
|
||||
of smb_send_rqst that ensures that the amount of data we're going to
|
||||
send agrees with the length in the RFC1002 header. If it doesn't, WARN()
|
||||
and return -EIO to the upper layers.
|
||||
|
||||
Signed-off-by: Jeff Layton <jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
|
||||
---
|
||||
fs/cifs/transport.c | 29 +++++++++++++++++++++++++++++
|
||||
1 file changed, 29 insertions(+)
|
||||
|
||||
diff --git a/fs/cifs/transport.c b/fs/cifs/transport.c
|
||||
index b37570952846..18cd5650a5fc 100644
|
||||
--- a/fs/cifs/transport.c
|
||||
+++ b/fs/cifs/transport.c
|
||||
@@ -270,6 +270,26 @@ cifs_rqst_page_to_kvec(struct smb_rqst *rqst, unsigned int idx,
|
||||
iov->iov_len = rqst->rq_pagesz;
|
||||
}
|
||||
|
||||
+static unsigned long
|
||||
+rqst_len(struct smb_rqst *rqst)
|
||||
+{
|
||||
+ unsigned int i;
|
||||
+ struct kvec *iov = rqst->rq_iov;
|
||||
+ unsigned long buflen = 0;
|
||||
+
|
||||
+ /* total up iov array first */
|
||||
+ for (i = 0; i < rqst->rq_nvec; i++)
|
||||
+ buflen += iov[i].iov_len;
|
||||
+
|
||||
+ /* add in the page array if there is one */
|
||||
+ if (rqst->rq_npages) {
|
||||
+ buflen += rqst->rq_pagesz * (rqst->rq_npages - 1);
|
||||
+ buflen += rqst->rq_tailsz;
|
||||
+ }
|
||||
+
|
||||
+ return buflen;
|
||||
+}
|
||||
+
|
||||
static int
|
||||
smb_send_rqst(struct TCP_Server_Info *server, struct smb_rqst *rqst)
|
||||
{
|
||||
@@ -277,6 +297,7 @@ smb_send_rqst(struct TCP_Server_Info *server, struct smb_rqst *rqst)
|
||||
struct kvec *iov = rqst->rq_iov;
|
||||
int n_vec = rqst->rq_nvec;
|
||||
unsigned int smb_buf_length = get_rfc1002_length(iov[0].iov_base);
|
||||
+ unsigned long send_length;
|
||||
unsigned int i;
|
||||
size_t total_len = 0, sent;
|
||||
struct socket *ssocket = server->ssocket;
|
||||
@@ -285,6 +306,14 @@ smb_send_rqst(struct TCP_Server_Info *server, struct smb_rqst *rqst)
|
||||
if (ssocket == NULL)
|
||||
return -ENOTSOCK;
|
||||
|
||||
+ /* sanity check send length */
|
||||
+ send_length = rqst_len(rqst);
|
||||
+ if (send_length != smb_buf_length + 4) {
|
||||
+ WARN(1, "Send length mismatch(send_length=%lu smb_buf_length=%u)\n",
|
||||
+ send_length, smb_buf_length);
|
||||
+ return -EIO;
|
||||
+ }
|
||||
+
|
||||
cifs_dbg(FYI, "Sending smb: smb_len=%u\n", smb_buf_length);
|
||||
dump_smb(iov[0].iov_base, iov[0].iov_len);
|
||||
|
||||
--
|
||||
1.8.5.3
|
||||
|
|
@ -20,6 +20,7 @@ CONFIG_RESET_GPIO=y
|
|||
|
||||
CONFIG_RCU_FANOUT_LEAF=16
|
||||
# CONFIG_RTC_DRV_SNVS is not set
|
||||
# CONFIG_RTC_DRV_HYM8563 is not set
|
||||
CONFIG_BACKLIGHT_PWM=m
|
||||
CONFIG_INPUT_PWM_BEEPER=m
|
||||
CONFIG_ARM_SP805_WATCHDOG=m
|
||||
|
@ -28,7 +29,6 @@ CONFIG_ARM_ARCH_TIMER_EVTSTREAM=y
|
|||
# CONFIG_ARM_DT_BL_CPUFREQ is not set
|
||||
CONFIG_NR_CPUS=8
|
||||
|
||||
CONFIG_ARM_DMA_USE_IOMMU=y
|
||||
CONFIG_SWIOTLB=y
|
||||
CONFIG_DMA_VIRTUAL_CHANNELS=y
|
||||
CONFIG_FB_SIMPLE=y
|
||||
|
@ -38,10 +38,14 @@ CONFIG_HAVE_PERF_USER_STACK_DUMP=y
|
|||
|
||||
# ARM AMBA generic HW
|
||||
CONFIG_ARM_AMBA=y
|
||||
CONFIG_ARM_CCI=y
|
||||
CONFIG_ARM_DMA_USE_IOMMU=y
|
||||
CONFIG_ARM_GIC=y
|
||||
CONFIG_ARM_GLOBAL_TIMER=y
|
||||
CONFIG_ARM_SMMU=y
|
||||
CONFIG_MMC_ARMMMCI=y
|
||||
CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
|
||||
CONFIG_SERIAL_AMBA_PL011=y
|
||||
CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
|
||||
CONFIG_SERIO_AMBAKMI=y
|
||||
CONFIG_OC_ETM=y
|
||||
CONFIG_FB_ARMCLCD=y
|
||||
|
@ -67,14 +71,18 @@ CONFIG_OF_EARLY_FLATTREE=y
|
|||
CONFIG_OF_FLATTREE=y
|
||||
CONFIG_OF_GPIO=y
|
||||
CONFIG_OF_I2C=m
|
||||
CONFIG_OF_IOMMU=y
|
||||
CONFIG_OF_IRQ=y
|
||||
CONFIG_OF_MDIO=m
|
||||
CONFIG_OF_MTD=y
|
||||
CONFIG_OF_NET=y
|
||||
CONFIG_OF_PCI_IRQ=m
|
||||
CONFIG_OF_PCI=m
|
||||
CONFIG_OF_RESERVED_MEM=y
|
||||
CONFIG_PATA_OF_PLATFORM=m
|
||||
# CONFIG_OF_SELFTEST is not set
|
||||
CONFIG_SERIAL_OF_PLATFORM=y
|
||||
CONFIG_THERMAL_OF=y
|
||||
|
||||
# External Connectors
|
||||
CONFIG_EXTCON=m
|
||||
|
@ -100,6 +108,7 @@ CONFIG_MTD_PHYSMAP_OF=m
|
|||
CONFIG_GPIO_DEVRES=y
|
||||
CONFIG_GPIO_GENERIC=m
|
||||
CONFIG_GPIO_GENERIC_PLATFORM=m
|
||||
CONFIG_GPIO_WATCHDOG=m
|
||||
CONFIG_GPIOLIB=y
|
||||
CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
|
||||
CONFIG_ARCH_REQUIRE_GPIOLIB=y
|
||||
|
@ -109,10 +118,10 @@ CONFIG_POWER_RESET_GPIO=y
|
|||
CONFIG_POWER_RESET_RESTART=y
|
||||
|
||||
#i2c
|
||||
CONFIG_I2C_ARB_GPIO_CHALLENGE=m
|
||||
CONFIG_I2C_BOARDINFO=y
|
||||
CONFIG_I2C_GPIO=m
|
||||
CONFIG_I2C_MUX=m
|
||||
# CONFIG_I2C_ARB_GPIO_CHALLENGE is not set
|
||||
CONFIG_I2C_MUX_GPIO=m
|
||||
CONFIG_I2C_MUX_PINCTRL=m
|
||||
CONFIG_I2C_MUX_PCA9541=m
|
||||
|
@ -122,7 +131,7 @@ CONFIG_SENSORS_IIO_HWMON=m
|
|||
CONFIG_IIO_SYSFS_TRIGGER=m
|
||||
|
||||
# PHY framework
|
||||
CONFIG_GENERIC_PHY=m
|
||||
CONFIG_GENERIC_PHY=y
|
||||
|
||||
# MFD
|
||||
CONFIG_MFD_CORE=m
|
||||
|
@ -130,8 +139,21 @@ CONFIG_MFD_CORE=m
|
|||
CONFIG_SMC91X=m
|
||||
CONFIG_SMC911X=m
|
||||
|
||||
CONFIG_CPU_THERMAL=y
|
||||
CONFIG_THERMAL_GOV_USER_SPACE=y
|
||||
|
||||
# Contiguous Memory Allocator
|
||||
CONFIG_CMA=y
|
||||
CONFIG_DMA_CMA=y
|
||||
# CONFIG_CMA_DEBUG is not set
|
||||
CONFIG_CMA_SIZE_MBYTES=16
|
||||
CONFIG_CMA_SIZE_SEL_MBYTES=y
|
||||
# CONFIG_CMA_SIZE_SEL_PERCENTAGE is not set
|
||||
# CONFIG_CMA_SIZE_SEL_MIN is not set
|
||||
# CONFIG_CMA_SIZE_SEL_MAX is not set
|
||||
CONFIG_CMA_ALIGNMENT=8
|
||||
CONFIG_CMA_AREAS=7
|
||||
|
||||
# CONFIG_CRYPTO_TEST is not set
|
||||
# CONFIG_TRANSPARENT_HUGEPAGE is not set
|
||||
# CONFIG_XEN is not set
|
||||
|
@ -140,7 +162,6 @@ CONFIG_THERMAL_GOV_USER_SPACE=y
|
|||
# CONFIG_DRM_SHMOBILE is not set
|
||||
# CONFIG_I2C_SH_MOBILE is not set
|
||||
# CONFIG_MMC_DW_SOCFPGA is not set
|
||||
# CONFIG_ARM_SMMU is not set
|
||||
# CONFIG_I2C_NOMADIK is not set
|
||||
# CONFIG_IRQ_DOMAIN_DEBUG is not set
|
||||
# CONFIG_LEDS_RENESAS_TPU is not set
|
||||
|
@ -150,6 +171,13 @@ CONFIG_THERMAL_GOV_USER_SPACE=y
|
|||
# CONFIG_DRM_TEGRA is not set
|
||||
# CONFIG_SHMOBILE_IOMMU is not set
|
||||
|
||||
# CONFIG_COMMON_CLK_SI570 is not set
|
||||
# CONFIG_COMMON_CLK_QCOM is not set
|
||||
|
||||
# CONFIG_ARM_PTDUMP is not set
|
||||
|
||||
# CONFIG_PATA_PLATFORM is not set
|
||||
|
||||
### turn off things which make no sense on embedded SoC
|
||||
|
||||
# core
|
||||
|
@ -164,6 +192,7 @@ CONFIG_THERMAL_GOV_USER_SPACE=y
|
|||
# CONFIG_NET_VENDOR_EXAR is not set
|
||||
# CONFIG_NET_VENDOR_INTEL is not set
|
||||
# CONFIG_NET_VENDOR_MELLANOX is not set
|
||||
# CONFIG_NET_VENDOR_BROCADE is not set
|
||||
|
||||
# scsi
|
||||
|
||||
|
@ -173,8 +202,11 @@ CONFIG_THERMAL_GOV_USER_SPACE=y
|
|||
# CONFIG_SCSI_IPS is not set
|
||||
# CONFIG_SCSI_CXGB3_ISCSI is not set
|
||||
# CONFIG_SCSI_CXGB4_ISCSI is not set
|
||||
# CONFIG_SCSI_BFA_FC is not set
|
||||
|
||||
# serial
|
||||
# CONFIG_SERIAL_SH_SCI is not set
|
||||
|
||||
CONFIG_CRASH=m
|
||||
|
||||
# CONFIG_DEBUG_SET_MODULE_RONX is not set
|
||||
|
|
|
@ -12,8 +12,6 @@ CONFIG_ARCH_HAS_HOLES_MEMORYMODEL=y
|
|||
CONFIG_ARCH_REQUIRE_GPIOLIB=y
|
||||
# CONFIG_ARM64_64K_PAGES is not set
|
||||
CONFIG_COMPAT=y
|
||||
# CONFIG_ARM_DT_BL_CPUFREQ is not set
|
||||
CONFIG_ARM_SMMU=y
|
||||
|
||||
CONFIG_BCMA_POSSIBLE=y
|
||||
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
|
||||
|
@ -42,7 +40,8 @@ CONFIG_HAVE_NET_DSA=y
|
|||
CONFIG_HVC_DRIVER=y
|
||||
CONFIG_HZ=100
|
||||
|
||||
# CONFIG_KVM is not set
|
||||
CONFIG_KVM=y
|
||||
CONFIG_KVM_ARM_MAX_VCPUS=8
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
|
||||
CONFIG_NFS_ACL_SUPPORT=y
|
||||
|
|
88
config-armv7
88
config-armv7
|
@ -1,6 +1,6 @@
|
|||
# ARM unified arch kernel
|
||||
|
||||
# CONFIG_ARCH_EXYNOS_MULTI is not set
|
||||
# CONFIG_ARCH_BERLIN is not set
|
||||
# CONFIG_ARCH_KEYSTONE is not set
|
||||
CONFIG_ARCH_MVEBU=y
|
||||
CONFIG_ARCH_MXC=y
|
||||
|
@ -10,7 +10,6 @@ CONFIG_ARCH_OMAP4=y
|
|||
CONFIG_ARCH_PICOXCELL=y
|
||||
CONFIG_ARCH_ROCKCHIP=y
|
||||
CONFIG_ARCH_SOCFPGA=y
|
||||
CONFIG_ARCH_SUNXI=y
|
||||
CONFIG_ARCH_TEGRA=y
|
||||
CONFIG_ARCH_U8500=y
|
||||
# CONFIG_ARCH_VIRT is not set
|
||||
|
@ -32,7 +31,6 @@ CONFIG_CACHE_TAUROS2=y
|
|||
CONFIG_MV_XOR=y
|
||||
CONFIG_CRYPTO_DEV_MV_CESA=m
|
||||
CONFIG_MV643XX_ETH=m
|
||||
CONFIG_I2C_MV64XXX=m
|
||||
CONFIG_PINCTRL_MVEBU=y
|
||||
CONFIG_PINCTRL_ARMADA_370=y
|
||||
CONFIG_PINCTRL_ARMADA_XP=y
|
||||
|
@ -44,11 +42,13 @@ CONFIG_RTC_DRV_MV=m
|
|||
CONFIG_MVNETA=m
|
||||
CONFIG_GPIO_MVEBU=y
|
||||
CONFIG_MVEBU_CLK_CORE=y
|
||||
CONFIG_MVEBU_CLK_COREDIV=y
|
||||
CONFIG_MVEBU_CLK_GATING=y
|
||||
CONFIG_MMC_MVSDIO=m
|
||||
CONFIG_SPI_ORION=m
|
||||
CONFIG_USB_MV_UDC=m
|
||||
CONFIG_MVEBU_MBUS=y
|
||||
CONFIG_PHY_MVEBU_SATA=y
|
||||
CONFIG_ARMADA_THERMAL=m
|
||||
CONFIG_DRM_ARMADA=m
|
||||
|
||||
|
@ -100,7 +100,6 @@ CONFIG_OMAP_IOVMM=m
|
|||
CONFIG_HWSPINLOCK_OMAP=m
|
||||
CONFIG_OMAP3_EMU=y
|
||||
# CONFIG_OMAP3_SDRC_AC_TIMING is not set
|
||||
CONFIG_OMAP_WATCHDOG=m
|
||||
|
||||
CONFIG_SERIAL_OMAP=y
|
||||
CONFIG_SERIAL_OMAP_CONSOLE=y
|
||||
|
@ -124,7 +123,6 @@ CONFIG_TWL6040_CORE=y
|
|||
CONFIG_CLK_TWL6040=m
|
||||
CONFIG_OMAP_INTERCONNECT=m
|
||||
CONFIG_MFD_OMAP_USB_HOST=y
|
||||
CONFIG_MTD_ONENAND_OMAP2=m
|
||||
CONFIG_HDQ_MASTER_OMAP=m
|
||||
CONFIG_REGULATOR_TWL4030=y
|
||||
CONFIG_BACKLIGHT_PANDORA=m
|
||||
|
@ -146,11 +144,11 @@ CONFIG_TWL6030_GPADC=m
|
|||
|
||||
# OMAP5 (possibly other devices too)
|
||||
CONFIG_MFD_PALMAS=y
|
||||
CONFIG_PINCTRL_PALMAS=y
|
||||
CONFIG_EXTCON_PALMAS=m
|
||||
CONFIG_RTC_DRV_PALMAS=m
|
||||
CONFIG_REGULATOR_PALMAS=m
|
||||
CONFIG_GPIO_PALMAS=y
|
||||
CONFIG_PINCTRL_PALMAS=y
|
||||
CONFIG_REGULATOR_PALMAS=y
|
||||
CONFIG_RTC_DRV_PALMAS=m
|
||||
|
||||
CONFIG_WL_TI=y
|
||||
CONFIG_WLCORE_SDIO=m
|
||||
|
@ -160,7 +158,9 @@ CONFIG_WILINK_PLATFORM_DATA=y
|
|||
CONFIG_MFD_WL1273_CORE=m
|
||||
CONFIG_NFC_WILINK=m
|
||||
|
||||
CONFIG_MTD_ONENAND_OMAP2=m
|
||||
CONFIG_MTD_NAND_OMAP2=m
|
||||
CONFIG_MTD_NAND_OMAP_BCH=y
|
||||
CONFIG_SPI_OMAP24XX=m
|
||||
CONFIG_MFD_TI_SSP=m
|
||||
CONFIG_SPI_TI_SSP=m
|
||||
|
@ -185,7 +185,7 @@ CONFIG_POWER_AVS=y
|
|||
CONFIG_POWER_AVS_OMAP=y
|
||||
CONFIG_POWER_AVS_OMAP_CLASS3=y
|
||||
|
||||
# CONFIG_ARM_OMAP2PLUS_CPUFREQ is not set
|
||||
CONFIG_ARM_OMAP2PLUS_CPUFREQ=y
|
||||
|
||||
CONFIG_PWM_TIECAP=m
|
||||
CONFIG_PWM_TIEHRPWM=m
|
||||
|
@ -307,29 +307,29 @@ CONFIG_TI_DAVINCI_EMAC=m
|
|||
CONFIG_TI_DAVINCI_MDIO=m
|
||||
CONFIG_TI_CPSW=m
|
||||
CONFIG_TI_CPSW_PHY_SEL=y
|
||||
# CONFIG_TI_CPTS is not set
|
||||
CONFIG_TI_CPTS=y
|
||||
# Needed for BBone White
|
||||
CONFIG_REGULATOR_TPS65217=y
|
||||
CONFIG_TI_EMIF=m
|
||||
CONFIG_DRM_TILCDC=m
|
||||
CONFIG_SPI_DAVINCI=m
|
||||
CONFIG_SND_DAVINCI_SOC=m
|
||||
CONFIG_SND_DAVINCI_SOC_I2S=m
|
||||
CONFIG_SND_DAVINCI_SOC_MCASP=m
|
||||
CONFIG_SND_DAVINCI_SOC_VCIF=m
|
||||
CONFIG_SND_DAVINCI_SOC_GENERIC_EVM=m
|
||||
CONFIG_SND_AM33XX_SOC_EVM=m
|
||||
CONFIG_REGULATOR_TI_ABB=m
|
||||
CONFIG_TI_ADC081C=m
|
||||
CONFIG_TI_AM335X_ADC=m
|
||||
CONFIG_PWM_TIPWMSS=y
|
||||
CONFIG_SND_AM33XX_SOC_EVM=m
|
||||
CONFIG_SND_AM335X_SOC_NXPTDA_EVM=m
|
||||
|
||||
# Allwinner a1x
|
||||
CONFIG_PINCTRL_SUNXI=y
|
||||
CONFIG_SUNXI_WATCHDOG=m
|
||||
CONFIG_MDIO_SUN4I=m
|
||||
CONFIG_NET_VENDOR_ALLWINNER=y
|
||||
CONFIG_SUN4I_EMAC=m
|
||||
CONFIG_EEPROM_SUNXI_SID=m
|
||||
# CONFIG_GPIO_DAVINCI is not set
|
||||
# CONFIG_DAVINCI_WATCHDOG is not set
|
||||
|
||||
# i.MX
|
||||
CONFIG_MXC_IRQ_PRIOR=y
|
||||
# CONFIG_MXC_DEBUG_BOARD is not set
|
||||
CONFIG_SOC_IMX50=y
|
||||
CONFIG_SOC_IMX53=y
|
||||
CONFIG_SOC_IMX6Q=y
|
||||
CONFIG_SOC_IMX6SL=y
|
||||
|
@ -340,6 +340,7 @@ CONFIG_ARM_IMX6Q_CPUFREQ=m
|
|||
CONFIG_IMX_THERMAL=m
|
||||
CONFIG_PATA_IMX=m
|
||||
CONFIG_PCI_IMX6=y
|
||||
# CONFIG_USB_EHCI_MXC is not set
|
||||
CONFIG_USB_CHIPIDEA=m
|
||||
CONFIG_USB_CHIPIDEA_UDC=y
|
||||
CONFIG_USB_CHIPIDEA_HOST=y
|
||||
|
@ -348,13 +349,18 @@ CONFIG_USB_FSL_USB2=m
|
|||
CONFIG_NET_VENDOR_FREESCALE=y
|
||||
CONFIG_FEC=m
|
||||
CONFIG_KEYBOARD_IMX=m
|
||||
CONFIG_KEYBOARD_STMPE=m
|
||||
CONFIG_TOUCHSCREEN_STMPE=m
|
||||
CONFIG_SERIAL_IMX=y
|
||||
CONFIG_SERIAL_IMX_CONSOLE=y
|
||||
CONFIG_PINCTRL_IMX6SL=y
|
||||
CONFIG_I2C_IMX=m
|
||||
CONFIG_STMPE_I2C=y
|
||||
CONFIG_SPI_IMX=m
|
||||
CONFIG_STMPE_SPI=y
|
||||
CONFIG_MFD_MC13783=m
|
||||
CONFIG_MFD_MC13XXX_SPI=m
|
||||
CONFIG_MFD_STMPE=y
|
||||
CONFIG_W1_MASTER_MXC=m
|
||||
CONFIG_IMX_WEIM=y
|
||||
CONFIG_IMX2_WDT=m
|
||||
|
@ -362,8 +368,10 @@ CONFIG_HW_RANDOM_MXC_RNGA=m
|
|||
CONFIG_CRYPTO_DEV_SAHARA=m
|
||||
CONFIG_RTC_DRV_SNVS=m
|
||||
# CONFIG_FB_MX3 is not set
|
||||
# CONFIG_FB_IMX is not set
|
||||
|
||||
CONFIG_SND_IMX_SOC=m
|
||||
CONFIG_SND_SOC_FSL_SPDIF=m
|
||||
CONFIG_SND_SOC_FSL_SSI=m
|
||||
CONFIG_SND_SOC_FSL_UTILS=m
|
||||
CONFIG_SND_SOC_IMX_SSI=m
|
||||
|
@ -375,7 +383,6 @@ CONFIG_SND_SOC_IMX_WM8962=m
|
|||
CONFIG_SND_SOC_IMX_MC13783=m
|
||||
CONFIG_SND_SOC_IMX_SPDIF=m
|
||||
|
||||
CONFIG_USB_EHCI_MXC=m
|
||||
CONFIG_USB_IMX21_HCD=m
|
||||
CONFIG_USB_MXS_PHY=m
|
||||
CONFIG_MMC_DW_SOCFPGA=m
|
||||
|
@ -392,7 +399,6 @@ CONFIG_AHCI_IMX=m
|
|||
# CONFIG_MXS_DMA is not set
|
||||
|
||||
CONFIG_PWM_IMX=m
|
||||
CONFIG_BACKLIGHT_PWM=m
|
||||
CONFIG_DRM_IMX=m
|
||||
CONFIG_DRM_IMX_FB_HELPER=m
|
||||
CONFIG_DRM_IMX_HDMI=m
|
||||
|
@ -424,6 +430,7 @@ CONFIG_INPUT_DA9052_ONKEY=m
|
|||
CONFIG_INPUT_DA9055_ONKEY=m
|
||||
CONFIG_GPIO_DA9052=m
|
||||
CONFIG_GPIO_DA9055=m
|
||||
CONFIG_GPIO_STMPE=y
|
||||
CONFIG_BATTERY_DA9052=m
|
||||
CONFIG_SENSORS_DA9052_ADC=m
|
||||
CONFIG_SENSORS_DA9055=m
|
||||
|
@ -476,15 +483,9 @@ CONFIG_AB8500_BM=y
|
|||
CONFIG_AB8500_GPADC=y
|
||||
CONFIG_SENSORS_AB8500=m
|
||||
CONFIG_STE_MODEM_RPROC=m
|
||||
CONFIG_CW1200=m
|
||||
CONFIG_CW1200_WLAN_SDIO=m
|
||||
CONFIG_CW1200_WLAN_SPI=m
|
||||
CONFIG_UX500_WATCHDOG=m
|
||||
CONFIG_IIO_ST_ACCEL_3AXIS=m
|
||||
CONFIG_IIO_ST_GYRO_3AXIS=m
|
||||
|
||||
CONFIG_IIO_ST_GYRO_I2C_3AXIS=m
|
||||
CONFIG_IIO_ST_GYRO_SPI_3AXIS=m
|
||||
CONFIG_IIO_ST_MAGN_3AXIS=m
|
||||
CONFIG_IIO_ST_MAGN_I2C_3AXIS=m
|
||||
CONFIG_IIO_ST_MAGN_SPI_3AXIS=m
|
||||
CONFIG_IIO_ST_PRESS=m
|
||||
|
@ -497,11 +498,12 @@ CONFIG_IIO_ST_SENSORS_CORE=m
|
|||
# tegra
|
||||
CONFIG_ARCH_TEGRA_2x_SOC=y
|
||||
CONFIG_ARCH_TEGRA_3x_SOC=y
|
||||
# CONFIG_ARCH_TEGRA_114_SOC is not set
|
||||
# CONFIG_ARCH_TEGRA_124_SOC is not set
|
||||
CONFIG_ARCH_TEGRA_114_SOC=y
|
||||
CONFIG_ARCH_TEGRA_124_SOC=y
|
||||
CONFIG_ARM_TEGRA_CPUFREQ=y
|
||||
CONFIG_TEGRA20_MC=y
|
||||
CONFIG_TEGRA30_MC=y
|
||||
CONFIG_TRUSTED_FOUNDATIONS=y
|
||||
|
||||
CONFIG_SERIAL_TEGRA=y
|
||||
|
||||
|
@ -511,12 +513,13 @@ CONFIG_TEGRA_IOMMU_SMMU=y
|
|||
CONFIG_MMC_SDHCI_TEGRA=m
|
||||
|
||||
CONFIG_I2C_TEGRA=m
|
||||
CONFIG_I2C_MUX_PCA954x=m
|
||||
|
||||
CONFIG_TEGRA_SYSTEM_DMA=y
|
||||
CONFIG_TEGRA_EMC_SCALING_ENABLE=y
|
||||
CONFIG_TEGRA_AHB=y
|
||||
CONFIG_TEGRA20_APB_DMA=y
|
||||
# CONFIG_SPI_TEGRA114 is not set
|
||||
CONFIG_SPI_TEGRA114=m
|
||||
CONFIG_SPI_TEGRA20_SFLASH=m
|
||||
CONFIG_SPI_TEGRA20_SLINK=m
|
||||
|
||||
|
@ -530,19 +533,18 @@ CONFIG_RTC_DRV_TEGRA=m
|
|||
|
||||
CONFIG_SND_SOC_TEGRA=m
|
||||
CONFIG_SND_SOC_TEGRA_ALC5632=m
|
||||
CONFIG_SND_SOC_TEGRA_MAX98090=m
|
||||
CONFIG_SND_SOC_TEGRA_RT5640=m
|
||||
CONFIG_SND_SOC_TEGRA_TRIMSLICE=m
|
||||
CONFIG_SND_SOC_TEGRA_WM8753=m
|
||||
CONFIG_SND_SOC_TEGRA_WM8903=m
|
||||
CONFIG_SND_SOC_TEGRA_WM9712=m
|
||||
CONFIG_SND_SOC_TEGRA20_AC97=m
|
||||
CONFIG_SND_SOC_TEGRA20_DAS=m
|
||||
CONFIG_SND_SOC_TEGRA20_SPDIF=m
|
||||
CONFIG_SND_SOC_TEGRA30_AHUB=m
|
||||
CONFIG_SND_SOC_TEGRA30_I2S=m
|
||||
|
||||
# bool only, upstream aiming for modular in 3.14
|
||||
# https://lkml.org/lkml/2013/11/18/47
|
||||
# CONFIG_DRM_TEGRA is not set
|
||||
|
||||
# AC100 (PAZ00)
|
||||
CONFIG_MFD_NVEC=y
|
||||
CONFIG_MFD_TPS80031=y
|
||||
|
@ -560,10 +562,13 @@ CONFIG_PWM_TEGRA=m
|
|||
|
||||
CONFIG_TEGRA_HOST1X=m
|
||||
CONFIG_TEGRA_HOST1X_FIREWALL=y
|
||||
|
||||
CONFIG_DRM_TEGRA=y
|
||||
# CONFIG_DRM_TEGRA_STAGING is not set
|
||||
CONFIG_DRM_TEGRA=m
|
||||
CONFIG_DRM_TEGRA_FBDEV=y
|
||||
# CONFIG_DRM_TEGRA_DEBUG is not set
|
||||
CONFIG_DRM_TEGRA_STAGING=y
|
||||
CONFIG_DRM_PANEL=y
|
||||
CONFIG_DRM_PANEL_SIMPLE=m
|
||||
|
||||
|
||||
CONFIG_CRYPTO_DEV_TEGRA_AES=m
|
||||
|
||||
|
@ -586,6 +591,7 @@ CONFIG_XILINX_EMACLITE=m
|
|||
CONFIG_GPIO_XILINX=y
|
||||
CONFIG_I2C_XILINX=m
|
||||
CONFIG_SPI_XILINX=m
|
||||
CONFIG_MMC_SDHCI_OF_ARASAN=m
|
||||
|
||||
# Multi function devices
|
||||
CONFIG_MFD_88PM800=m
|
||||
|
@ -631,6 +637,7 @@ CONFIG_REGULATOR_MAX8973=m
|
|||
# CONFIG_MFD_MAX77686 is not set
|
||||
# CONFIG_MFD_MAX77693 is not set
|
||||
# CONFIG_MFD_MAX8997 is not set
|
||||
# CONFIG_MFD_MAX14577 is not set
|
||||
# CONFIG_MFD_AAT2870_CORE is not set
|
||||
# CONFIG_MFD_RC5T583 is not set
|
||||
# CONFIG_MFD_SMSC is not set
|
||||
|
@ -648,10 +655,9 @@ CONFIG_REGULATOR_MAX8973=m
|
|||
# CONFIG_VIRTUALIZATION is not set
|
||||
# CONFIG_POWER_RESET_QNAP is not set
|
||||
# CONFIG_OMAP2_DSS_DEBUG is not set
|
||||
# CONFIG_DRM_TEGRA_DEBUG is not set
|
||||
# CONFIG_CRYPTO_DEV_UX500_DEBUG is not set
|
||||
# CONFIG_AB8500_DEBUG is not set
|
||||
|
||||
# CONFIG_SOC_VF610 is not set
|
||||
# CONFIG_ARM_CCI is not set
|
||||
# CONFIG_MMC_TMIO is not set
|
||||
# CONFIG_SND_SOC_ADI is not set
|
||||
|
|
|
@ -50,6 +50,7 @@ CONFIG_ALWAYS_USE_PERSISTENT_CLOCK=y
|
|||
|
||||
# Platforms enabled/disabled globally on ARMv7
|
||||
CONFIG_ARCH_HIGHBANK=y
|
||||
CONFIG_ARCH_SUNXI=y
|
||||
CONFIG_ARCH_VEXPRESS_CA9X4=y
|
||||
CONFIG_ARCH_VEXPRESS_CORTEX_A5_A9_ERRATA=y
|
||||
# CONFIG_ARCH_VEXPRESS_SPC is not set
|
||||
|
@ -60,13 +61,9 @@ CONFIG_ARCH_VEXPRESS_CORTEX_A5_A9_ERRATA=y
|
|||
# CONFIG_ARCH_U8500 is not set
|
||||
# CONFIG_ARCH_WM8850 is not set
|
||||
# CONFIG_ARCH_SHMOBILE_MULTI is not set
|
||||
|
||||
# highbank
|
||||
CONFIG_EDAC_HIGHBANK_MC=m
|
||||
CONFIG_EDAC_HIGHBANK_L2=m
|
||||
CONFIG_SATA_HIGHBANK=m
|
||||
CONFIG_ARM_HIGHBANK_CPUFREQ=m
|
||||
# CONFIG_ARM_HIGHBANK_CPUIDLE is not set
|
||||
# CONFIG_ARCH_BERLIN is not set
|
||||
# CONFIG_ARCH_HI3xxx is not set
|
||||
# CONFIG_ARCH_MSM_DT is not set
|
||||
|
||||
# errata
|
||||
# v5/v6
|
||||
|
@ -118,15 +115,8 @@ CONFIG_CPU_IDLE_GOV_MENU=y
|
|||
CONFIG_DEFAULT_MMAP_MIN_ADDR=32768
|
||||
CONFIG_LSM_MMAP_MIN_ADDR=32768
|
||||
|
||||
CONFIG_ARM_GLOBAL_TIMER=y
|
||||
|
||||
CONFIG_XZ_DEC_ARM=y
|
||||
|
||||
# Power management
|
||||
CONFIG_PM_OPP=y
|
||||
CONFIG_ARM_CPU_SUSPEND=y
|
||||
CONFIG_GENERIC_CPUFREQ_CPU0=m
|
||||
|
||||
CONFIG_LOCAL_TIMERS=y
|
||||
CONFIG_UACCESS_WITH_MEMCPY=y
|
||||
CONFIG_CC_STACKPROTECTOR=y
|
||||
|
@ -159,10 +149,27 @@ CONFIG_RTC_DRV_PL031=y
|
|||
|
||||
CONFIG_PL330_DMA=m
|
||||
CONFIG_AMBA_PL08X=y
|
||||
CONFIG_ARM_SP805_WATCHDOG=m
|
||||
CONFIG_GPIO_PL061=y
|
||||
CONFIG_PL320_MBOX=y
|
||||
|
||||
# highbank
|
||||
CONFIG_EDAC_HIGHBANK_MC=m
|
||||
CONFIG_EDAC_HIGHBANK_L2=m
|
||||
CONFIG_SATA_HIGHBANK=m
|
||||
CONFIG_ARM_HIGHBANK_CPUFREQ=m
|
||||
# CONFIG_ARM_HIGHBANK_CPUIDLE is not set
|
||||
|
||||
# Allwinner a1x
|
||||
CONFIG_PINCTRL_SUNXI=y
|
||||
CONFIG_SUNXI_WATCHDOG=m
|
||||
CONFIG_MDIO_SUN4I=m
|
||||
CONFIG_NET_VENDOR_ALLWINNER=y
|
||||
CONFIG_SUN4I_EMAC=m
|
||||
CONFIG_STMMAC_PLATFORM=y
|
||||
CONFIG_DWMAC_SUNXI=y
|
||||
CONFIG_EEPROM_SUNXI_SID=m
|
||||
CONFIG_RTC_DRV_SUNXI=m
|
||||
|
||||
CONFIG_REGMAP=y
|
||||
CONFIG_REGMAP_I2C=m
|
||||
CONFIG_REGMAP_SPI=m
|
||||
|
@ -170,6 +177,11 @@ CONFIG_REGMAP_SPMI=m
|
|||
CONFIG_REGMAP_MMIO=m
|
||||
CONFIG_REGMAP_IRQ=y
|
||||
|
||||
# Power management
|
||||
CONFIG_PM_OPP=y
|
||||
CONFIG_ARM_CPU_SUSPEND=y
|
||||
CONFIG_GENERIC_CPUFREQ_CPU0=m
|
||||
|
||||
# usb
|
||||
CONFIG_USB_OTG=y
|
||||
# CONFIG_USB_OTG_WHITELIST is not set
|
||||
|
@ -214,6 +226,8 @@ CONFIG_USB_CONFIGFS_OBEX=y
|
|||
# CONFIG_USB_CONFIGFS_RNDIS is not set
|
||||
CONFIG_USB_CONFIGFS_SERIAL=y
|
||||
CONFIG_USB_CONFIGFS_STORAGE=y
|
||||
# CONFIG_USB_CONFIGFS_F_LB_SS is not set
|
||||
# CONFIG_USB_CONFIGFS_F_FS is not set
|
||||
|
||||
# CONFIG_MUSB_PIO_ONLY is not set
|
||||
# CONFIG_USB_MUSB_DEBUG is not set
|
||||
|
@ -256,6 +270,8 @@ CONFIG_PINCTRL_SINGLE=y
|
|||
CONFIG_GENERIC_PINCONF=y
|
||||
# CONFIG_PINCTRL_SAMSUNG is not set
|
||||
# CONFIG_PINCTRL_EXYNOS4 is not set
|
||||
# CONFIG_PINCTRL_CAPRI is not set
|
||||
# CONFIG_PINCTRL_MSM8X74 is not set
|
||||
|
||||
# GPIO
|
||||
# CONFIG_GPIO_EM is not set
|
||||
|
@ -267,8 +283,11 @@ CONFIG_GPIO_MC33880=m
|
|||
CONFIG_GPIO_TPS65910=y
|
||||
CONFIG_GPIO_TPS65912=m
|
||||
CONFIG_LEDS_GPIO=m
|
||||
CONFIG_MDIO_BUS_MUX=m
|
||||
CONFIG_MDIO_BUS_MUX_GPIO=m
|
||||
CONFIG_MDIO_BUS_MUX_MMIOREG=m
|
||||
CONFIG_INPUT_GPIO=m
|
||||
CONFIG_INPUT_GPIO_BEEPER=m
|
||||
CONFIG_INPUT_GPIO_TILT_POLLED=m
|
||||
CONFIG_INPUT_MATRIXKMAP=m
|
||||
CONFIG_KEYBOARD_GPIO=m
|
||||
|
@ -300,6 +319,7 @@ CONFIG_NFC_NCI_SPI=y
|
|||
# i2c
|
||||
CONFIG_I2C_DESIGNWARE_CORE=m
|
||||
CONFIG_I2C_DESIGNWARE_PLATFORM=m
|
||||
CONFIG_I2C_MV64XXX=m
|
||||
|
||||
# HW crypto and rng
|
||||
CONFIG_CRYPTO_SHA1_ARM=m
|
||||
|
@ -331,6 +351,22 @@ CONFIG_MTD_DATAFLASH=m
|
|||
CONFIG_MTD_DATAFLASH_WRITE_VERIFY=y
|
||||
CONFIG_MTD_DATAFLASH_OTP=y
|
||||
CONFIG_MTD_M25P80=m
|
||||
CONFIG_MTD_NAND=m
|
||||
CONFIG_MTD_NAND_CAFE=m
|
||||
# CONFIG_MTD_NAND_DENALI is not set
|
||||
CONFIG_MTD_NAND_DOCG4=m
|
||||
CONFIG_MTD_NAND_ECC_SMC=y
|
||||
CONFIG_MTD_NAND_FSMC=m
|
||||
CONFIG_MTD_NAND_GPIO=m
|
||||
CONFIG_MTD_NAND_MXC=m
|
||||
CONFIG_MTD_NAND_NANDSIM=m
|
||||
CONFIG_MTD_NAND_ORION=m
|
||||
CONFIG_MTD_NAND_PLATFORM=m
|
||||
CONFIG_MTD_NAND_PXA3xx=m
|
||||
CONFIG_MTD_NAND_RICOH=m
|
||||
CONFIG_MTD_NAND_TMIO=m
|
||||
CONFIG_MTD_SPINAND_MT29F=m
|
||||
CONFIG_MTD_SPINAND_ONDIEECC=y
|
||||
CONFIG_MTD_SST25L=m
|
||||
CONFIG_EEPROM_AT25=m
|
||||
CONFIG_EEPROM_93XX46=m
|
||||
|
@ -347,6 +383,7 @@ CONFIG_SPI_DW_PCI=m
|
|||
# CONFIG_MMC_DW_SOCFPGA is not set
|
||||
# CONFIG_MMC_DW_EXYNOS is not set
|
||||
# CONFIG_MMC_DW_IDMAC is not set
|
||||
# CONFIG_MMC_DW_K3 is not set
|
||||
CONFIG_USB_DWC2=m
|
||||
# CONFIG_USB_DWC2_DEBUG is not set
|
||||
# CONFIG_USB_DWC2_TRACK_MISSED_SOFS is not set
|
||||
|
@ -355,6 +392,7 @@ CONFIG_USB_DWC3_OMAP=m
|
|||
CONFIG_USB_DWC3_EXYNOS=m
|
||||
CONFIG_USB_DWC3_PCI=m
|
||||
# CONFIG_USB_DWC3_DEBUG is not set
|
||||
# CONFIG_USB_DWC3_KEYSTONE is not set
|
||||
CONFIG_DW_WATCHDOG=m
|
||||
CONFIG_PCIE_DW=y
|
||||
CONFIG_PCI_EXYNOS=y
|
||||
|
@ -395,11 +433,12 @@ CONFIG_RTC_DRV_TPS80031=m
|
|||
# Regulators
|
||||
CONFIG_REGULATOR=y
|
||||
CONFIG_RFKILL_REGULATOR=m
|
||||
# CONFIG_REGULATOR_DUMMY is not set
|
||||
CONFIG_REGULATOR_FIXED_VOLTAGE=m
|
||||
CONFIG_REGULATOR_DUMMY=y
|
||||
CONFIG_REGULATOR_FIXED_VOLTAGE=y
|
||||
CONFIG_REGULATOR_VIRTUAL_CONSUMER=m
|
||||
CONFIG_REGULATOR_USERSPACE_CONSUMER=m
|
||||
CONFIG_REGULATOR_GPIO=m
|
||||
# CONFIG_REGULATOR_ACT8865 is not set
|
||||
CONFIG_REGULATOR_AD5398=m
|
||||
CONFIG_REGULATOR_DA9210=m
|
||||
CONFIG_REGULATOR_FAN53555=m
|
||||
|
@ -476,18 +515,6 @@ CONFIG_LEDS_DAC124S085=m
|
|||
CONFIG_LEDS_PWM=m
|
||||
CONFIG_BMP085_SPI=m
|
||||
|
||||
# Contiguous Memory Allocator
|
||||
CONFIG_OF_RESERVED_MEM=y
|
||||
CONFIG_CMA=y
|
||||
CONFIG_DMA_CMA=y
|
||||
# CONFIG_CMA_DEBUG is not set
|
||||
CONFIG_CMA_SIZE_MBYTES=16
|
||||
CONFIG_CMA_SIZE_SEL_MBYTES=y
|
||||
# CONFIG_CMA_SIZE_SEL_PERCENTAGE is not set
|
||||
# CONFIG_CMA_SIZE_SEL_MIN is not set
|
||||
# CONFIG_CMA_SIZE_SEL_MAX is not set
|
||||
CONFIG_CMA_ALIGNMENT=8
|
||||
CONFIG_CMA_AREAS=7
|
||||
CONFIG_SRAM=y
|
||||
|
||||
# Ethernet
|
||||
|
@ -524,6 +551,9 @@ CONFIG_UBIFS_FS_LZO=y
|
|||
CONFIG_UBIFS_FS_ZLIB=y
|
||||
# CONFIG_UBIFS_FS_DEBUG is not set
|
||||
|
||||
# Sensors
|
||||
CONFIG_SENSORS_HTU21=m
|
||||
|
||||
# Chromebook
|
||||
CONFIG_MFD_CROS_EC=m
|
||||
CONFIG_MFD_CROS_EC_I2C=m
|
||||
|
@ -532,11 +562,10 @@ CONFIG_KEYBOARD_CROS_EC=m
|
|||
|
||||
# Should be in generic
|
||||
CONFIG_BPF_JIT=y
|
||||
|
||||
# CONFIG_NET_VENDOR_CIRRUS is not set
|
||||
# CONFIG_NET_VENDOR_MICROCHIP is not set
|
||||
|
||||
# CONFIG_PATA_PLATFORM is not set
|
||||
|
||||
# CONFIG_DRM_EXYNOS is not set
|
||||
# CONFIG_DRM_TILCDC is not set
|
||||
# CONFIG_DRM_IMX is not set
|
||||
|
@ -565,6 +594,8 @@ CONFIG_BPF_JIT=y
|
|||
# CONFIG_SPI_TOPCLIFF_PCH is not set
|
||||
# CONFIG_SPI_PXA2XX is not set
|
||||
# CONFIG_SPI_FSL_DSPI is not set
|
||||
# CONFIG_FB_XILINX is not set
|
||||
# CONFIG_USB_S3C_HSOTG is not set
|
||||
|
||||
# these modules all fail with missing __bad_udelay
|
||||
# http://www.spinics.net/lists/arm/msg15615.html provides some background
|
||||
|
@ -586,7 +617,5 @@ CONFIG_BPF_JIT=y
|
|||
# CONFIG_DEBUG_USER is not set
|
||||
# CONFIG_DEBUG_LL is not set
|
||||
# CONFIG_DEBUG_PINCTRL is not set
|
||||
# CONFIG_ARM_DT_BL_CPUFREQ is not set
|
||||
|
||||
# FIX ME
|
||||
# CONFIG_FB_XILINX is not set
|
||||
# CONFIG_DMADEVICES_VDEBUG is not set
|
||||
# CONFIG_DMADEVICES_DEBUG is not set
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
# ARM A15 lpae unified arch kernel
|
||||
CONFIG_ARCH_EXYNOS_MULTI=y
|
||||
CONFIG_ARCH_KEYSTONE=y
|
||||
CONFIG_ARCH_VIRT=y
|
||||
CONFIG_ARCH_EXYNOS5=y
|
||||
|
||||
# CONFIG_ARCH_MVEBU is not set
|
||||
# CONFIG_ARCH_MXC is not set
|
||||
|
@ -12,23 +10,17 @@ CONFIG_ARCH_EXYNOS5=y
|
|||
# CONFIG_SOC_AM33XX is not set
|
||||
# CONFIG_SND_AM33XX_SOC_EVM is not set
|
||||
# CONFIG_SOC_AM43XX is not set
|
||||
# CONFIG_SOC_DRA7XX is not set
|
||||
# CONFIG_ARCH_ROCKCHIP is not set
|
||||
# CONFIG_ARCH_SOCFPGA is not set
|
||||
# CONFIG_ARCH_SUNXI is not set
|
||||
# CONFIG_ARCH_TEGRA is not set
|
||||
# CONFIG_ARCH_ZYNQ is not set
|
||||
|
||||
|
||||
# CONFIG_ARCH_EXYNOS4 is not set
|
||||
|
||||
# CONFIG_EXYNOS_ATAGS is not set
|
||||
|
||||
CONFIG_ARM_LPAE=y
|
||||
CONFIG_SYS_SUPPORTS_HUGETLBFS=y
|
||||
CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y
|
||||
CONFIG_ARM_VIRT_EXT=y
|
||||
CONFIG_VIRTUALIZATION=y
|
||||
CONFIG_ARM_SMMU=y
|
||||
CONFIG_ARM_DMA_IOMMU_ALIGNMENT=8
|
||||
|
||||
# Cortex-A15
|
||||
|
@ -41,7 +33,7 @@ CONFIG_KVM_ARM_MAX_VCPUS=8
|
|||
CONFIG_KVM_ARM_VGIC=y
|
||||
CONFIG_KVM_ARM_TIMER=y
|
||||
|
||||
CONFIG_XEN=y
|
||||
# CONFIG_XEN is not set
|
||||
CONFIG_XEN_FBDEV_FRONTEND=y
|
||||
CONFIG_INPUT_XEN_KBDDEV_FRONTEND=m
|
||||
CONFIG_XEN_BLKDEV_FRONTEND=m
|
||||
|
@ -58,6 +50,7 @@ CONFIG_XEN_SYS_HYPERVISOR=y
|
|||
CONFIG_XEN_GNTDEV=y
|
||||
CONFIG_XEN_GRANT_DEV_ALLOC=m
|
||||
CONFIG_XEN_WDT=m
|
||||
# CONFIG_XEN_BALLOON is not set
|
||||
|
||||
CONFIG_SERIAL_SAMSUNG=y
|
||||
CONFIG_SERIAL_SAMSUNG_CONSOLE=y
|
||||
|
@ -72,9 +65,9 @@ CONFIG_SOC_EXYNOS5440=y
|
|||
CONFIG_EXYNOS_THERMAL=m
|
||||
CONFIG_PCI_EXYNOS=y
|
||||
|
||||
CONFIG_ARM_CCI=y
|
||||
CONFIG_TCG_TIS_I2C_INFINEON=m
|
||||
|
||||
# CONFIG_EXYNOS_ATAGS is not set
|
||||
CONFIG_PINCTRL_EXYNOS=y
|
||||
CONFIG_PINCTRL_EXYNOS5440=y
|
||||
CONFIG_EXYNOS_IOMMU=y
|
||||
|
@ -113,11 +106,15 @@ CONFIG_SAMSUNG_USB3PHY=m
|
|||
CONFIG_MMC_DW_EXYNOS=m
|
||||
CONFIG_RTC_DRV_S3C=m
|
||||
|
||||
# Chromebook
|
||||
CONFIG_MFD_CROS_EC=m
|
||||
CONFIG_MFD_CROS_EC_I2C=m
|
||||
CONFIG_MFD_CROS_EC_SPI=m
|
||||
CONFIG_KEYBOARD_CROS_EC=m
|
||||
# TI Keystone
|
||||
CONFIG_KEYSTONE_USB_PHY=m
|
||||
CONFIG_USB_DWC3_KEYSTONE=m
|
||||
CONFIG_GPIO_DAVINCI=y
|
||||
CONFIG_I2C_DAVINCI=m
|
||||
# CONFIG_DAVINCI_WATCHDOG is not set
|
||||
# CONFIG_SPI_DAVINCI is not set
|
||||
# CONFIG_SND_DAVINCI_SOC is not set
|
||||
# CONFIG_TI_SOC_THERMAL is not set
|
||||
|
||||
# Arndale/Origen
|
||||
CONFIG_MFD_MAX8997=y
|
||||
|
@ -136,7 +133,3 @@ CONFIG_S3C_LOWLEVEL_UART_PORT=1
|
|||
# CONFIG_S3C2410_WATCHDOG is not set
|
||||
# CONFIG_MMC_SDHCI_S3C is not set
|
||||
# CONFIG_TEGRA_HOST1X is not set
|
||||
# CONFIG_SPI_DAVINCI is not set
|
||||
# CONFIG_I2C_DAVINCI is not set
|
||||
# CONFIG_SND_DAVINCI_SOC is not set
|
||||
# CONFIG_TI_SOC_THERMAL is not set
|
||||
|
|
|
@ -26,8 +26,6 @@ CONFIG_FAULT_INJECTION_STACKTRACE_FILTER=y
|
|||
CONFIG_FAIL_IO_TIMEOUT=y
|
||||
CONFIG_FAIL_MMC_REQUEST=y
|
||||
|
||||
CONFIG_SLUB_DEBUG_ON=y
|
||||
|
||||
CONFIG_LOCK_STAT=y
|
||||
|
||||
CONFIG_DEBUG_STACK_USAGE=y
|
||||
|
|
|
@ -128,7 +128,8 @@ CONFIG_MMC=m
|
|||
CONFIG_SDIO_UART=m
|
||||
# CONFIG_MMC_TEST is not set
|
||||
# CONFIG_MMC_DEBUG is not set
|
||||
# CONFIG_MMC_UNSAFE_RESUME is not set
|
||||
# https://lists.fedoraproject.org/pipermail/kernel/2014-February/004889.html
|
||||
CONFIG_MMC_UNSAFE_RESUME=y
|
||||
# CONFIG_MMC_CLKGATE is not set
|
||||
CONFIG_MMC_BLOCK=m
|
||||
CONFIG_MMC_BLOCK_MINORS=8
|
||||
|
@ -148,6 +149,7 @@ CONFIG_MMC_REALTEK_PCI=m
|
|||
CONFIG_MMC_VUB300=m
|
||||
# CONFIG_MMC_SDHCI_PXAV2 is not set
|
||||
# CONFIG_MMC_SDHCI_PXAV3 is not set
|
||||
# CONFIG_MMC_SDHCI_OF_ARASAN is not set
|
||||
|
||||
|
||||
CONFIG_CB710_CORE=m
|
||||
|
@ -182,6 +184,7 @@ CONFIG_INFINIBAND_NES=m
|
|||
CONFIG_INFINIBAND_QIB=m
|
||||
CONFIG_INFINIBAND_QIB_DCA=y
|
||||
# CONFIG_INFINIBAND_OCRDMA is not set
|
||||
# CONFIG_INFINIBAND_USNIC is not set
|
||||
|
||||
#
|
||||
# Executable file formats
|
||||
|
@ -196,7 +199,6 @@ CONFIG_BINFMT_MISC=m
|
|||
# Device Drivers
|
||||
#
|
||||
|
||||
# CONFIG_COMMON_CLK_DEBUG is not set
|
||||
# CONFIG_COMMON_CLK_SI5351 is not set
|
||||
|
||||
#
|
||||
|
@ -313,6 +315,8 @@ CONFIG_BLK_DEV=y
|
|||
CONFIG_BLK_DEV_NULL_BLK=m
|
||||
CONFIG_BLK_DEV_FD=m
|
||||
# CONFIG_PARIDE is not set
|
||||
CONFIG_ZRAM=m
|
||||
# CONFIG_ZRAM_DEBUG is not set
|
||||
|
||||
CONFIG_BLK_CPQ_DA=m
|
||||
CONFIG_BLK_CPQ_CISS_DA=m
|
||||
|
@ -665,7 +669,7 @@ CONFIG_FIREWIRE_SBP2=m
|
|||
CONFIG_FIREWIRE_NET=m
|
||||
CONFIG_FIREWIRE_OHCI_DEBUG=y
|
||||
CONFIG_FIREWIRE_NOSY=m
|
||||
CONFIG_FIREWIRE_SERIAL=m
|
||||
# CONFIG_FIREWIRE_SERIAL is not set
|
||||
# CONFIG_FIREWIRE_OHCI_REMOTE_DMA is not set
|
||||
|
||||
#
|
||||
|
@ -857,6 +861,7 @@ CONFIG_NETFILTER_XT_TARGET_TPROXY=m
|
|||
|
||||
CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m
|
||||
CONFIG_NETFILTER_XT_MATCH_BPF=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CGROUP=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CLUSTER=m
|
||||
CONFIG_NETFILTER_XT_MATCH_COMMENT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CPU=m
|
||||
|
@ -873,8 +878,10 @@ CONFIG_NETFILTER_XT_MATCH_ESP=m
|
|||
CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_HELPER=m
|
||||
CONFIG_NETFILTER_XT_MATCH_HL=m
|
||||
CONFIG_NETFILTER_XT_MATCH_IPCOMP=m
|
||||
CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
|
||||
CONFIG_NETFILTER_XT_MATCH_IPVS=m
|
||||
CONFIG_NETFILTER_XT_MATCH_L2TP=m
|
||||
CONFIG_NETFILTER_XT_MATCH_LENGTH=m
|
||||
CONFIG_NETFILTER_XT_MATCH_LIMIT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_MAC=m
|
||||
|
@ -988,6 +995,7 @@ CONFIG_IP6_NF_TARGET_MASQUERADE=m
|
|||
|
||||
# nf_tables support
|
||||
CONFIG_NF_TABLES=m
|
||||
CONFIG_NF_TABLES_INET=m
|
||||
CONFIG_NFT_EXTHDR=m
|
||||
CONFIG_NFT_META=m
|
||||
CONFIG_NFT_CT=m
|
||||
|
@ -997,6 +1005,8 @@ CONFIG_NFT_COUNTER=m
|
|||
CONFIG_NFT_LOG=m
|
||||
CONFIG_NFT_LIMIT=m
|
||||
CONFIG_NFT_NAT=m
|
||||
CONFIG_NFT_QUEUE=m
|
||||
CONFIG_NFT_REJECT=m
|
||||
CONFIG_NFT_COMPAT=m
|
||||
|
||||
CONFIG_NF_TABLES_IPV4=m
|
||||
|
@ -1137,6 +1147,8 @@ CONFIG_NET_SCH_QFQ=m
|
|||
CONFIG_NET_SCH_CODEL=m
|
||||
CONFIG_NET_SCH_FQ_CODEL=m
|
||||
CONFIG_NET_SCH_FQ=m
|
||||
CONFIG_NET_SCH_HHF=m
|
||||
CONFIG_NET_SCH_PIE=m
|
||||
CONFIG_NET_SCH_PLUG=m
|
||||
CONFIG_NET_CLS=y
|
||||
CONFIG_NET_CLS_ACT=y
|
||||
|
@ -1186,7 +1198,6 @@ CONFIG_OPENVSWITCH=m
|
|||
CONFIG_OPENVSWITCH_GRE=y
|
||||
CONFIG_OPENVSWITCH_VXLAN=y
|
||||
CONFIG_VSOCKETS=m
|
||||
CONFIG_NETPRIO_CGROUP=m
|
||||
|
||||
|
||||
#
|
||||
|
@ -1374,6 +1385,10 @@ CONFIG_IXGBE_DCB=y
|
|||
CONFIG_IXGBE_HWMON=y
|
||||
CONFIG_IXGBE_PTP=y
|
||||
CONFIG_I40E=m
|
||||
# CONFIG_I40E_VXLAN is not set
|
||||
# CONFIG_I40E_DCB is not set
|
||||
# CONFIG_I40EVF is not set
|
||||
|
||||
|
||||
# CONFIG_NET_VENDOR_I825XX is not set
|
||||
CONFIG_NET_VENDOR_MARVELL=y
|
||||
|
@ -1620,6 +1635,9 @@ CONFIG_ATH9K_HTC=m
|
|||
CONFIG_ATH9K_BTCOEX_SUPPORT=y
|
||||
# CONFIG_ATH9K_HTC_DEBUGFS is not set
|
||||
# CONFIG_ATH9K_LEGACY_RATE_CONTROL is not set
|
||||
# CONFIG_ATH9K_STATION_STATISTICS is not set
|
||||
# CONFIG_ATH9K_WOW is not set
|
||||
#
|
||||
CONFIG_ATH10K=m
|
||||
CONFIG_ATH10K_PCI=m
|
||||
# CONFIG_ATH10K_DEBUG is not set
|
||||
|
@ -1737,6 +1755,7 @@ CONFIG_RT73USB=m
|
|||
CONFIG_RTL8180=m
|
||||
CONFIG_RTL8187=m
|
||||
# CONFIG_USB_ZD1201 is not set
|
||||
# CONFIG_USB_NET_SR9800 is not set
|
||||
CONFIG_USB_NET_RNDIS_WLAN=m
|
||||
CONFIG_USB_NET_KALMIA=m
|
||||
CONFIG_USB_NET_QMI_WWAN=m
|
||||
|
@ -1814,6 +1833,8 @@ CONFIG_NFC_HCI=m
|
|||
CONFIG_NFC_SHDLC=y
|
||||
CONFIG_NFC_LLCP=y
|
||||
CONFIG_NFC_SIM=m
|
||||
CONFIG_NFC_MRVL=m
|
||||
CONFIG_NFC_MRVL_USB=m
|
||||
|
||||
#
|
||||
# Near Field Communication (NFC) devices
|
||||
|
@ -2312,7 +2333,12 @@ CONFIG_I2C=m
|
|||
CONFIG_I2C_COMPAT=y
|
||||
CONFIG_I2C_CHARDEV=m
|
||||
# CONFIG_I2C_MUX is not set
|
||||
# CONFIG_I2C_ARB_GPIO_CHALLENGE is not set
|
||||
# CONFIG_I2C_MUX_PCA954x is not set
|
||||
# CONFIG_I2C_MUX_GPIO is not set
|
||||
# CONFIG_I2C_MUX_PCA9541 is not set
|
||||
# CONFIG_I2C_MUX_PINCTRL is not set
|
||||
#
|
||||
|
||||
#
|
||||
# I2C Algorithms
|
||||
|
@ -2352,6 +2378,7 @@ CONFIG_I2C_NFORCE2=m
|
|||
# CONFIG_I2C_OCORES is not set
|
||||
CONFIG_I2C_PARPORT=m
|
||||
CONFIG_I2C_PARPORT_LIGHT=m
|
||||
# CONFIG_I2C_ROBOTFUZZ_OSIF is not set
|
||||
CONFIG_I2C_PASEMI=m
|
||||
CONFIG_I2C_PCA_PLATFORM=m
|
||||
# CONFIG_I2C_PIIX4 is not set
|
||||
|
@ -2536,6 +2563,7 @@ CONFIG_HID_SENSOR_ENUM_BASE_QUIRKS=y
|
|||
# CONFIG_MCP4725 is not set
|
||||
# CONFIG_ITG3200 is not set
|
||||
# CONFIG_APDS9300 is not set
|
||||
# CONFIG_CM32181 is not set
|
||||
# CONFIG_CM36651 is not set
|
||||
# CONFIG_GP2AP020A00F is not set
|
||||
# CONFIG_TSL2583 is not set
|
||||
|
@ -2550,6 +2578,7 @@ CONFIG_HID_SENSOR_ENUM_BASE_QUIRKS=y
|
|||
CONFIG_IIO_ST_GYRO_3AXIS=m
|
||||
CONFIG_IIO_ST_MAGN_3AXIS=m
|
||||
CONFIG_IIO_ST_ACCEL_3AXIS=m
|
||||
CONFIG_HID_SENSOR_INCLINOMETER_3D=m
|
||||
# CONFIG_ADJD_S311 is not set
|
||||
# CONFIG_SENSORS_TSL2563 is not set
|
||||
# CONFIG_VCNL4000 is not set
|
||||
|
@ -2587,6 +2616,8 @@ CONFIG_IIO_ST_ACCEL_3AXIS=m
|
|||
# CONFIG_ADXRS450 is not set
|
||||
# CONFIG_ADIS16400 is not set
|
||||
# CONFIG_ADIS16480 is not set
|
||||
# CONFIG_DHT11 is not set
|
||||
# CONFIG_MPL3115 is not set
|
||||
|
||||
# staging IIO drivers
|
||||
# CONFIG_AD7291 is not set
|
||||
|
@ -2718,6 +2749,7 @@ CONFIG_WM831X_WATCHDOG=m
|
|||
# CONFIG_DW_WATCHDOG is not set
|
||||
CONFIG_W83697UG_WDT=m
|
||||
# CONFIG_MEN_A21_WDT is not set
|
||||
# CONFIG_GPIO_WATCHDOG is not set
|
||||
|
||||
CONFIG_HW_RANDOM=y
|
||||
CONFIG_HW_RANDOM_TIMERIOMEM=m
|
||||
|
@ -2781,6 +2813,7 @@ CONFIG_RTC_DRV_DS3232=m
|
|||
CONFIG_RTC_DRV_ISL12022=m
|
||||
# CONFIG_RTC_DRV_HID_SENSOR_TIME is not set
|
||||
# CONFIG_RTC_DRV_MOXART is not set
|
||||
# CONFIG_RTC_DRV_ISL12057 is not set
|
||||
|
||||
CONFIG_R3964=m
|
||||
# CONFIG_APPLICOM is not set
|
||||
|
@ -2824,6 +2857,7 @@ CONFIG_DRM_I915=m
|
|||
CONFIG_DRM_I915_KMS=y
|
||||
CONFIG_DRM_I915_FBDEV=y
|
||||
# CONFIG_DRM_I915_PRELIMINARY_HW_SUPPORT is not set
|
||||
# CONFIG_DRM_I915_UMS is not set
|
||||
CONFIG_DRM_VIA=m
|
||||
CONFIG_DRM_NOUVEAU=m
|
||||
CONFIG_NOUVEAU_DEBUG=5
|
||||
|
@ -2838,6 +2872,7 @@ CONFIG_DRM_UDL=m
|
|||
CONFIG_DRM_VMWGFX=m
|
||||
CONFIG_DRM_VMWGFX_FBCON=y
|
||||
CONFIG_DRM_QXL=m
|
||||
CONFIG_DRM_BOCHS=m
|
||||
|
||||
#
|
||||
# PCMCIA character devices
|
||||
|
@ -2871,6 +2906,10 @@ CONFIG_VIDEO_V4L2=y
|
|||
# CONFIG_VIDEO_V4L2_INT_DEVICE is not set
|
||||
CONFIG_VIDEO_V4L2_SUBDEV_API=y
|
||||
# CONFIG_VIDEO_VIVI is not set
|
||||
# CONFIG_USB_SI4713 is not set
|
||||
# CONFIG_PLATFORM_SI4713 is not set
|
||||
# CONFIG_I2C_SI4713 is not set
|
||||
# CONFIG_USB_RAREMONO is not set
|
||||
|
||||
#
|
||||
# Video For Linux
|
||||
|
@ -2904,6 +2943,7 @@ CONFIG_VIDEO_CX88_BLACKBIRD=m
|
|||
CONFIG_VIDEO_CX88_ENABLE_VP3054=y
|
||||
CONFIG_VIDEO_CX88_VP3054=m
|
||||
CONFIG_VIDEO_EM28XX=m
|
||||
CONFIG_VIDEO_EM28XX_V4L2=m
|
||||
CONFIG_VIDEO_EM28XX_ALSA=m
|
||||
CONFIG_VIDEO_EM28XX_DVB=m
|
||||
CONFIG_VIDEO_EM28XX_RC=y
|
||||
|
@ -3195,6 +3235,7 @@ CONFIG_FB_EFI=y
|
|||
# CONFIG_FB_BROADSHEET is not set
|
||||
# CONFIG_FB_UDL is not set
|
||||
# CONFIG_FB_GOLDFISH is not set
|
||||
# CONFIG_FB_OPENCORES is not set
|
||||
|
||||
# CONFIG_FIRMWARE_EDID is not set
|
||||
|
||||
|
@ -3419,6 +3460,7 @@ CONFIG_USB_EHCI_TT_NEWSCHED=y
|
|||
CONFIG_USB_ISP1362_HCD=m
|
||||
CONFIG_USB_FUSBH200_HCD=m
|
||||
# CONFIG_USB_FOTG210_HCD is not set
|
||||
# CONFIG_USB_GR_UDC is not set
|
||||
CONFIG_USB_OHCI_HCD=y
|
||||
CONFIG_USB_OHCI_HCD_PCI=y
|
||||
# CONFIG_USB_OHCI_HCD_SSB is not set
|
||||
|
@ -3735,6 +3777,7 @@ CONFIG_USB_SERIAL_MOS7715_PARPORT=y
|
|||
# CONFIG_USB_SERIAL_ZTE is not set
|
||||
CONFIG_USB_SERIAL_MOS7840=m
|
||||
CONFIG_USB_SERIAL_MOTOROLA=m
|
||||
# CONFIG_USB_SERIAL_MXUPORT is not set
|
||||
CONFIG_USB_SERIAL_NAVMAN=m
|
||||
CONFIG_USB_SERIAL_OPTION=m
|
||||
CONFIG_USB_SERIAL_OTI6858=m
|
||||
|
@ -3778,6 +3821,7 @@ CONFIG_USB_APPLEDISPLAY=m
|
|||
|
||||
# Physical Layer USB driver
|
||||
CONFIG_USB_PHY=y
|
||||
# CONFIG_USB_OTG_FSM is not set
|
||||
|
||||
# CONFIG_GENERIC_PHY is not set
|
||||
# CONFIG_PHY_EXYNOS_MIPI_VIDEO is not set
|
||||
|
@ -3789,6 +3833,7 @@ CONFIG_USB_PHY=y
|
|||
# CONFIG_SAMSUNG_USBPHY is not set
|
||||
# CONFIG_SAMSUNG_USB2PHY is not set
|
||||
# CONFIG_SAMSUNG_USB3PHY is not set
|
||||
# CONFIG_BCM_KONA_USB2_PHY is not set
|
||||
CONFIG_USB_RCAR_PHY=m
|
||||
CONFIG_USB_ATM=m
|
||||
CONFIG_USB_CXACRU=m
|
||||
|
@ -3909,6 +3954,7 @@ CONFIG_MFD_VIPERBOARD=m
|
|||
# CONFIG_MFD_TPS65912 is not set
|
||||
# CONFIG_MFD_SYSCON is not set
|
||||
# CONFIG_MFD_DA9063 is not set
|
||||
# CONFIG_MFD_LP3943 is not set
|
||||
|
||||
#
|
||||
# File systems
|
||||
|
@ -3961,6 +4007,7 @@ CONFIG_CEPH_FS=m
|
|||
CONFIG_CEPH_FSCACHE=y
|
||||
CONFIG_BLK_DEV_RBD=m
|
||||
CONFIG_CEPH_LIB=m
|
||||
CONFIG_CEPH_FS_POSIX_ACL=y
|
||||
# CONFIG_CEPH_LIB_USE_DNS_RESOLVER is not set
|
||||
|
||||
CONFIG_FSCACHE=m
|
||||
|
@ -4269,6 +4316,7 @@ CONFIG_LOCKUP_DETECTOR=y
|
|||
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
|
||||
# CONFIG_BOOTPARAM_HARDLOCKUP_PANIC is not set
|
||||
# CONFIG_PANIC_ON_OOPS is not set
|
||||
CONFIG_PANIC_TIMEOUT=0
|
||||
CONFIG_ATOMIC64_SELFTEST=y
|
||||
CONFIG_MEMORY_FAILURE=y
|
||||
CONFIG_HWPOISON_INJECT=m
|
||||
|
@ -4479,6 +4527,8 @@ CONFIG_MEMCG_SWAP_ENABLED=y
|
|||
CONFIG_MEMCG_KMEM=y
|
||||
# CONFIG_CGROUP_HUGETLB is not set
|
||||
CONFIG_CGROUP_PERF=y
|
||||
CONFIG_CGROUP_NET_PRIO=m
|
||||
# CONFIG_CGROUP_NET_CLASSID is not set
|
||||
CONFIG_BLK_CGROUP=y
|
||||
|
||||
# CONFIG_SYSFS_DEPRECATED is not set
|
||||
|
@ -4501,6 +4551,7 @@ CONFIG_THERMAL_GOV_FAIR_SHARE=y
|
|||
# CONFIG_THERMAL_GOV_USER_SPACE is not set
|
||||
CONFIG_THERMAL_GOV_STEP_WISE=y
|
||||
# CONFIG_THERMAL_EMULATION is not set
|
||||
# CONFIG_THERMAL_OF is not set
|
||||
# CONFIG_CPU_THERMAL is not set
|
||||
|
||||
CONFIG_INOTIFY=y
|
||||
|
@ -4762,6 +4813,7 @@ CONFIG_NOZOMI=m
|
|||
CONFIG_INPUT_APANEL=m
|
||||
CONFIG_INPUT_GP2A=m
|
||||
# CONFIG_INPUT_GPIO_TILT_POLLED is not set
|
||||
# CONFIG_INPUT_GPIO_BEEPER is not set
|
||||
|
||||
# CONFIG_INTEL_MENLOW is not set
|
||||
CONFIG_ENCLOSURE_SERVICES=m
|
||||
|
@ -4841,6 +4893,9 @@ CONFIG_STAGING_MEDIA=y
|
|||
# CONFIG_TI_ST is not set
|
||||
# CONFIG_FB_XGI is not set
|
||||
# CONFIG_VIDEO_GO7007 is not set
|
||||
# CONFIG_I2C_BCM2048 is not set
|
||||
# CONFIG_VIDEO_TCM825X is not set
|
||||
# CONFIG_VIDEO_OMAP4 is not set
|
||||
# CONFIG_USB_MSI3101 is not set
|
||||
# CONFIG_DT3155 is not set
|
||||
# CONFIG_W35UND is not set
|
||||
|
@ -4868,10 +4923,10 @@ CONFIG_RTL8192E=m
|
|||
# CONFIG_VIDEO_CX25821 is not set
|
||||
# CONFIG_R8187SE is not set
|
||||
# CONFIG_R8188EU is not set
|
||||
# CONFIG_R8821AE is not set
|
||||
# CONFIG_RTL8192U is not set
|
||||
# CONFIG_FB_SM7XX is not set
|
||||
# CONFIG_SPECTRA is not set
|
||||
# CONFIG_ZRAM is not set
|
||||
# CONFIG_EASYCAP is not set
|
||||
# CONFIG_SOLO6X10 is not set
|
||||
# CONFIG_ACPI_QUICKSTART is not set
|
||||
|
@ -4896,7 +4951,6 @@ CONFIG_ALTERA_STAPL=m
|
|||
# CONFIG_RTS5139 is not set
|
||||
# CONFIG_NVEC_LEDS is not set
|
||||
# CONFIG_VT6655 is not set
|
||||
# CONFIG_ZSMALLOC is not set
|
||||
# CONFIG_RAMSTER is not set
|
||||
# CONFIG_USB_WPAN_HCD is not set
|
||||
# CONFIG_WIMAX_GDM72XX is not set
|
||||
|
@ -4913,6 +4967,7 @@ CONFIG_ALTERA_STAPL=m
|
|||
# CONFIG_XILLYBUS is not set
|
||||
# CONFIG_DGAP is not set
|
||||
# CONFIG_DGNC is not set
|
||||
# CONFIG_RTS5208 is not set
|
||||
# END OF STAGING
|
||||
|
||||
#
|
||||
|
@ -4988,6 +5043,8 @@ CONFIG_PTP_1588_CLOCK_PCH=m
|
|||
CONFIG_CLEANCACHE=y
|
||||
CONFIG_FRONTSWAP=y
|
||||
CONFIG_ZSWAP=y
|
||||
CONFIG_ZSMALLOC=y
|
||||
# CONFIG_PGTABLE_MAPPING is not set
|
||||
|
||||
# CONFIG_MDIO_GPIO is not set
|
||||
# CONFIG_KEYBOARD_GPIO is not set
|
||||
|
@ -5027,16 +5084,17 @@ CONFIG_GPIO_VIPERBOARD=m
|
|||
# CONFIG_GPIO_GRGPIO is not set
|
||||
# CONFIG_GPIO_PL061 is not set
|
||||
# CONFIG_GPIO_BCM_KONA is not set
|
||||
# CONFIG_GPIO_SCH311X is not set
|
||||
|
||||
# FIXME: Why?
|
||||
CONFIG_EVENT_POWER_TRACING_DEPRECATED=y
|
||||
|
||||
CONFIG_TEST_KSTRTOX=y
|
||||
CONFIG_XZ_DEC=y
|
||||
# CONFIG_XZ_DEC_X86 is not set
|
||||
# CONFIG_XZ_DEC_POWERPC is not set
|
||||
CONFIG_XZ_DEC_X86=y
|
||||
CONFIG_XZ_DEC_POWERPC=y
|
||||
# CONFIG_XZ_DEC_IA64 is not set
|
||||
# CONFIG_XZ_DEC_ARM is not set
|
||||
CONFIG_XZ_DEC_ARM=y
|
||||
# CONFIG_XZ_DEC_ARMTHUMB is not set
|
||||
# CONFIG_XZ_DEC_SPARC is not set
|
||||
# CONFIG_XZ_DEC_TEST is not set
|
||||
|
@ -5059,6 +5117,8 @@ CONFIG_PSTORE_RAM=m
|
|||
# CONFIG_PSTORE_CONSOLE is not set
|
||||
# CONFIG_PSTORE_FTRACE is not set
|
||||
|
||||
# CONFIG_TEST_MODULE is not set
|
||||
# CONFIG_TEST_USER_COPY is not set
|
||||
|
||||
# CONFIG_AVERAGE is not set
|
||||
# CONFIG_VMXNET3 is not set
|
||||
|
@ -5090,10 +5150,14 @@ CONFIG_FMC_TRIVIAL=m
|
|||
CONFIG_FMC_WRITE_EEPROM=m
|
||||
CONFIG_FMC_CHARDEV=m
|
||||
|
||||
# CONFIG_GENWQE is not set
|
||||
|
||||
# CONFIG_POWERCAP is not set
|
||||
|
||||
# CONFIG_HSI is not set
|
||||
|
||||
# CONFIG_CPU_IDLE is not set
|
||||
|
||||
# CONFIG_ARM_ARCH_TIMER_EVTSTREAM is not set
|
||||
|
||||
# CONFIG_PM_DEVFREQ is not set
|
||||
|
|
|
@ -26,8 +26,6 @@ CONFIG_CPUMASK_OFFSTACK=y
|
|||
# CONFIG_FAIL_IO_TIMEOUT is not set
|
||||
# CONFIG_FAIL_MMC_REQUEST is not set
|
||||
|
||||
# CONFIG_SLUB_DEBUG_ON is not set
|
||||
|
||||
# CONFIG_LOCK_STAT is not set
|
||||
|
||||
# CONFIG_DEBUG_STACK_USAGE is not set
|
||||
|
|
|
@ -321,6 +321,7 @@ CONFIG_SERIAL_GRLIB_GAISLER_APBUART=m
|
|||
|
||||
# CONFIG_PPC_MPC512x is not set
|
||||
# CONFIG_RTC_DRV_MPC5121 is not set
|
||||
# CONFIG_RTC_DRV_HYM8563 is not set
|
||||
|
||||
# CONFIG_MPC512X_DMA is not set
|
||||
|
||||
|
@ -360,7 +361,7 @@ CONFIG_RCU_FANOUT_LEAF=16
|
|||
# CONFIG_SPAPR_TCE_IOMMU is not set
|
||||
# CONFIG_TRANSPARENT_HUGEPAGE is not set
|
||||
|
||||
# CONFIG_PPC_DENORMALISATION is not set
|
||||
CONFIG_PPC_DENORMALISATION=y
|
||||
# CONFIG_MDIO_BUS_MUX_MMIOREG is not set
|
||||
# CONFIG_GPIO_ADNP is not set
|
||||
# CONFIG_MFD_SYSCON is not set
|
||||
|
|
|
@ -89,6 +89,8 @@ CONFIG_NR_CPUS=1024
|
|||
CONFIG_RTAS_PROC=y
|
||||
CONFIG_IOMMU_VMERGE=y
|
||||
CONFIG_NUMA=y
|
||||
CONFIG_NUMA_BALANCING=y
|
||||
CONFIG_NUMA_BALANCING_DEFAULT_ENABLED=y
|
||||
CONFIG_PPC_64K_PAGES=y
|
||||
CONFIG_PPC_SUBPAGE_PROT=y
|
||||
CONFIG_SCHED_SMT=y
|
||||
|
@ -99,6 +101,8 @@ CONFIG_HZ_100=y
|
|||
|
||||
CONFIG_MEMORY_HOTREMOVE=y
|
||||
|
||||
CONFIG_PPC64_SUPPORTS_MEMORY_FAILURE=y
|
||||
|
||||
CONFIG_CGROUP_HUGETLB=y
|
||||
|
||||
# CONFIG_MV643XX_ETH is not set
|
||||
|
@ -159,7 +163,8 @@ CONFIG_PSERIES_ENERGY=m
|
|||
|
||||
CONFIG_CPU_IDLE=y
|
||||
# CONFIG_CPU_IDLE_GOV_LADDER is not set
|
||||
CONFIG_PSERIES_IDLE=y
|
||||
CONFIG_PSERIES_CPUIDLE=y
|
||||
CONFIG_POWERNV_CPUIDLE=y
|
||||
|
||||
CONFIG_PPC_ICSWX=y
|
||||
CONFIG_IO_EVENT_IRQ=y
|
||||
|
|
|
@ -80,6 +80,8 @@ CONFIG_NR_CPUS=1024
|
|||
CONFIG_RTAS_PROC=y
|
||||
CONFIG_IOMMU_VMERGE=y
|
||||
CONFIG_NUMA=y
|
||||
CONFIG_NUMA_BALANCING=y
|
||||
CONFIG_NUMA_BALANCING_DEFAULT_ENABLED=y
|
||||
CONFIG_PPC_64K_PAGES=y
|
||||
CONFIG_PPC_SUBPAGE_PROT=y
|
||||
CONFIG_SCHED_SMT=y
|
||||
|
@ -90,6 +92,8 @@ CONFIG_HZ_100=y
|
|||
|
||||
CONFIG_MEMORY_HOTREMOVE=y
|
||||
|
||||
CONFIG_PPC64_SUPPORTS_MEMORY_FAILURE=y
|
||||
|
||||
CONFIG_CGROUP_HUGETLB=y
|
||||
|
||||
# CONFIG_MV643XX_ETH is not set
|
||||
|
@ -150,7 +154,8 @@ CONFIG_PSERIES_ENERGY=m
|
|||
|
||||
CONFIG_CPU_IDLE=y
|
||||
# CONFIG_CPU_IDLE_GOV_LADDER is not set
|
||||
CONFIG_PSERIES_IDLE=y
|
||||
CONFIG_PSERIES_CPUIDLE=y
|
||||
CONFIG_POWERNV_CPUIDLE=y
|
||||
|
||||
CONFIG_PPC_ICSWX=y
|
||||
CONFIG_IO_EVENT_IRQ=y
|
||||
|
|
|
@ -224,8 +224,13 @@ CONFIG_BACKLIGHT_PWM=m
|
|||
# CONFIG_GPIO_ADNP is not set
|
||||
# CONFIG_BACKLIGHT_OT200 is not set
|
||||
# CONFIG_RTC_DRV_SNVS is not set
|
||||
# CONFIG_RTC_DRV_HYM8563 is not set
|
||||
# CONFIG_OF_DISPLAY_TIMING is not set
|
||||
# CONFIG_OF_VIDEOMODE is not set
|
||||
|
||||
# CONFIG_MLX5_INFINIBAND is not set
|
||||
# CONFIG_PINCTRL_SINGLE is not set
|
||||
# CONFIG_PINCTRL_CAPRI is not set
|
||||
# CONFIG_PINCTRL_MSM8X74 is not set
|
||||
# CONFIG_COMMON_CLK_SI570 is not set
|
||||
# CONFIG_COMMON_CLK_QCOM is not set
|
||||
|
|
|
@ -41,6 +41,7 @@ CONFIG_EFI_VARS_PSTORE_DEFAULT_DISABLE=y
|
|||
CONFIG_EFI_PCDP=y
|
||||
CONFIG_FB_EFI=y
|
||||
CONFIG_EARLY_PRINTK_EFI=y
|
||||
CONFIG_EFI_RUNTIME_MAP=y
|
||||
# needs FB_SIMPLE to work correctly
|
||||
# CONFIG_X86_SYSFB is not set
|
||||
|
||||
|
@ -114,6 +115,9 @@ CONFIG_NVRAM=y
|
|||
CONFIG_CRYPTO_DEV_PADLOCK=m
|
||||
CONFIG_CRYPTO_DEV_PADLOCK_AES=m
|
||||
CONFIG_CRYPTO_DEV_PADLOCK_SHA=m
|
||||
CONFIG_CRYPTO_DEV_CCP=y
|
||||
CONFIG_CRYPTO_DEV_CCP_DD=m
|
||||
CONFIG_CRYPTO_DEV_CCP_CRYPTO=m
|
||||
|
||||
CONFIG_GENERIC_ISA_DMA=y
|
||||
|
||||
|
@ -200,6 +204,7 @@ CONFIG_COMPAL_LAPTOP=m
|
|||
CONFIG_DELL_LAPTOP=m
|
||||
CONFIG_CHROME_PLATFORMS=y
|
||||
CONFIG_CHROMEOS_LAPTOP=m
|
||||
CONFIG_CHROMEOS_PSTORE=m
|
||||
CONFIG_EEEPC_LAPTOP=m
|
||||
CONFIG_FUJITSU_TABLET=m
|
||||
CONFIG_FUJITSU_LAPTOP=m
|
||||
|
@ -216,6 +221,7 @@ CONFIG_ACER_WMI=m
|
|||
CONFIG_ACERHDF=m
|
||||
CONFIG_ASUS_WMI=m
|
||||
CONFIG_ASUS_NB_WMI=m
|
||||
CONFIG_HP_WIRELESS=m
|
||||
CONFIG_HP_WMI=m
|
||||
# CONFIG_INTEL_SCU_IPC is not set
|
||||
CONFIG_DELL_WMI=m
|
||||
|
@ -410,6 +416,7 @@ CONFIG_HP_ACCEL=m
|
|||
|
||||
CONFIG_SCHED_SMT=y
|
||||
CONFIG_CC_STACKPROTECTOR=y
|
||||
CONFIG_CC_STACKPROTECTOR_STRONG=y
|
||||
CONFIG_RELOCATABLE=y
|
||||
|
||||
CONFIG_HYPERV=m
|
||||
|
@ -446,6 +453,7 @@ CONFIG_PINCTRL_BAYTRAIL=y
|
|||
|
||||
# CONFIG_INTEL_POWERCLAMP is not set
|
||||
CONFIG_X86_PKG_TEMP_THERMAL=m
|
||||
CONFIG_ACPI_INT3403_THERMAL=m
|
||||
|
||||
CONFIG_VMWARE_VMCI=m
|
||||
CONFIG_VMWARE_VMCI_VSOCKETS=m
|
||||
|
|
|
@ -37,6 +37,7 @@ CONFIG_SWIOTLB=y
|
|||
# CONFIG_GART_IOMMU is not set
|
||||
|
||||
CONFIG_TRANSPARENT_HUGEPAGE=y
|
||||
CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y
|
||||
CONFIG_CGROUP_HUGETLB=y
|
||||
CONFIG_MEM_SOFT_DIRTY=y
|
||||
|
||||
|
@ -117,6 +118,7 @@ CONFIG_XEN_DEV_EVTCHN=m
|
|||
CONFIG_XEN_SYS_HYPERVISOR=y
|
||||
# CONFIG_XEN_MCE_LOG is not set
|
||||
# CONFIG_XEN_STUB is not set
|
||||
# CONFIG_XEN_PVH is not set
|
||||
|
||||
CONFIG_PROVIDE_OHCI1394_DMA_INIT=y
|
||||
|
||||
|
@ -170,3 +172,4 @@ CONFIG_SFC_MTD=y
|
|||
# Override MTD stuff because SFC_MTD needs it
|
||||
CONFIG_MTD_CHAR=m
|
||||
CONFIG_MTD_BLOCK=m
|
||||
|
||||
|
|
|
@ -1,45 +0,0 @@
|
|||
Bugzilla: 1056711
|
||||
Upstream-status: Submitted for 3.15
|
||||
|
||||
This fixes the issue described here:
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1056711#c5
|
||||
|
||||
net-next commit 971a351ccbbd2b6eef136a2221da0b80aca50906
|
||||
Author: Jiri Pirko <jiri@resnulli.us>
|
||||
Date: Tue Dec 10 13:56:29 2013 +0100
|
||||
|
||||
ipv6 addrconf: revert /proc/net/if_inet6 ifa_flag format
|
||||
|
||||
Turned out that applications like ifconfig do not handle the change.
|
||||
So revert ifa_flag format back to 2-letter hex value.
|
||||
|
||||
Introduced by:
|
||||
commit 479840ffdbe4242e8a25349218c8e0859223aa35
|
||||
"ipv6 addrconf: extend ifa_flags to u32"
|
||||
|
||||
Signed-off-by: Jiri Pirko <jpirko@redhat.com>
|
||||
|
||||
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
|
||||
index be4dbbd..3c3425e 100644
|
||||
--- a/net/ipv6/addrconf.c
|
||||
+++ b/net/ipv6/addrconf.c
|
||||
@@ -3367,12 +3367,12 @@ static void if6_seq_stop(struct seq_file *seq, void *v)
|
||||
static int if6_seq_show(struct seq_file *seq, void *v)
|
||||
{
|
||||
struct inet6_ifaddr *ifp = (struct inet6_ifaddr *)v;
|
||||
- seq_printf(seq, "%pi6 %02x %02x %02x %03x %8s\n",
|
||||
+ seq_printf(seq, "%pi6 %02x %02x %02x %02x %8s\n",
|
||||
&ifp->addr,
|
||||
ifp->idev->dev->ifindex,
|
||||
ifp->prefix_len,
|
||||
ifp->scope,
|
||||
- ifp->flags,
|
||||
+ (u8) ifp->flags,
|
||||
ifp->idev->dev->name);
|
||||
return 0;
|
||||
}
|
||||
|
||||
_______________________________________________
|
||||
kernel mailing list
|
||||
kernel@lists.fedoraproject.org
|
||||
https://admin.fedoraproject.org/mailman/listinfo/kernel
|
|
@ -1,753 +0,0 @@
|
|||
This patch is made against 3.13 kernel. So it's suitable for F21 and for F20
|
||||
later on when F20 is rebased to 3.13.
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1056711
|
||||
|
||||
NetworkManager depends on IFA_F_NOPREFIXROUTE IFA_F_MANAGETEMPADDR
|
||||
in order to do SLAAC in userspace correctly.
|
||||
|
||||
Split patches available here:
|
||||
|
||||
http://people.redhat.com/jpirko/f21_backport_of_IFA_F_NOPREFIXROUTE_and_IFA_F_MANAGETEMPADDR/
|
||||
|
||||
Jiri Pirko (2):
|
||||
ipv6 addrconf: extend ifa_flags to u32
|
||||
ipv6 addrconf: introduce IFA_F_MANAGETEMPADDR to tell kernel to manage
|
||||
temporary addresses
|
||||
|
||||
Li RongQing (1):
|
||||
ipv6: unneccessary to get address prefix in addrconf_get_prefix_route
|
||||
|
||||
Thomas Haller (2):
|
||||
ipv6 addrconf: add IFA_F_NOPREFIXROUTE flag to suppress creation of
|
||||
IP6 routes
|
||||
ipv6 addrconf: don't cleanup prefix route for IFA_F_NOPREFIXROUTE
|
||||
|
||||
stephen hemminger (1):
|
||||
ipv6: addrconf spelling fixes
|
||||
|
||||
include/net/addrconf.h | 4 +-
|
||||
include/net/if_inet6.h | 2 +-
|
||||
include/uapi/linux/if_addr.h | 6 +
|
||||
net/ipv6/addrconf.c | 409 +++++++++++++++++++++++++------------------
|
||||
4 files changed, 250 insertions(+), 171 deletions(-)
|
||||
|
||||
Signed-off-by: Jiri Pirko <jpirko@redhat.com>
|
||||
|
||||
diff --git a/include/net/addrconf.h b/include/net/addrconf.h
|
||||
index 86505bf..e70278e 100644
|
||||
--- a/include/net/addrconf.h
|
||||
+++ b/include/net/addrconf.h
|
||||
@@ -81,9 +81,9 @@ int ipv6_dev_get_saddr(struct net *net, const struct net_device *dev,
|
||||
const struct in6_addr *daddr, unsigned int srcprefs,
|
||||
struct in6_addr *saddr);
|
||||
int __ipv6_get_lladdr(struct inet6_dev *idev, struct in6_addr *addr,
|
||||
- unsigned char banned_flags);
|
||||
+ u32 banned_flags);
|
||||
int ipv6_get_lladdr(struct net_device *dev, struct in6_addr *addr,
|
||||
- unsigned char banned_flags);
|
||||
+ u32 banned_flags);
|
||||
int ipv6_rcv_saddr_equal(const struct sock *sk, const struct sock *sk2);
|
||||
void addrconf_join_solict(struct net_device *dev, const struct in6_addr *addr);
|
||||
void addrconf_leave_solict(struct inet6_dev *idev, const struct in6_addr *addr);
|
||||
diff --git a/include/net/if_inet6.h b/include/net/if_inet6.h
|
||||
index 65bb130..9650a3f 100644
|
||||
--- a/include/net/if_inet6.h
|
||||
+++ b/include/net/if_inet6.h
|
||||
@@ -50,8 +50,8 @@ struct inet6_ifaddr {
|
||||
|
||||
int state;
|
||||
|
||||
+ __u32 flags;
|
||||
__u8 dad_probes;
|
||||
- __u8 flags;
|
||||
|
||||
__u16 scope;
|
||||
|
||||
diff --git a/include/uapi/linux/if_addr.h b/include/uapi/linux/if_addr.h
|
||||
index 23357ab..dea10a8 100644
|
||||
--- a/include/uapi/linux/if_addr.h
|
||||
+++ b/include/uapi/linux/if_addr.h
|
||||
@@ -18,6 +18,9 @@ struct ifaddrmsg {
|
||||
* It makes no difference for normally configured broadcast interfaces,
|
||||
* but for point-to-point IFA_ADDRESS is DESTINATION address,
|
||||
* local address is supplied in IFA_LOCAL attribute.
|
||||
+ *
|
||||
+ * IFA_FLAGS is a u32 attribute that extends the u8 field ifa_flags.
|
||||
+ * If present, the value from struct ifaddrmsg will be ignored.
|
||||
*/
|
||||
enum {
|
||||
IFA_UNSPEC,
|
||||
@@ -28,6 +31,7 @@ enum {
|
||||
IFA_ANYCAST,
|
||||
IFA_CACHEINFO,
|
||||
IFA_MULTICAST,
|
||||
+ IFA_FLAGS,
|
||||
__IFA_MAX,
|
||||
};
|
||||
|
||||
@@ -44,6 +48,8 @@ enum {
|
||||
#define IFA_F_DEPRECATED 0x20
|
||||
#define IFA_F_TENTATIVE 0x40
|
||||
#define IFA_F_PERMANENT 0x80
|
||||
+#define IFA_F_MANAGETEMPADDR 0x100
|
||||
+#define IFA_F_NOPREFIXROUTE 0x200
|
||||
|
||||
struct ifa_cacheinfo {
|
||||
__u32 ifa_prefered;
|
||||
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
|
||||
index 4b6b720..3c4e25d 100644
|
||||
--- a/net/ipv6/addrconf.c
|
||||
+++ b/net/ipv6/addrconf.c
|
||||
@@ -891,15 +891,95 @@ out:
|
||||
goto out2;
|
||||
}
|
||||
|
||||
+enum cleanup_prefix_rt_t {
|
||||
+ CLEANUP_PREFIX_RT_NOP, /* no cleanup action for prefix route */
|
||||
+ CLEANUP_PREFIX_RT_DEL, /* delete the prefix route */
|
||||
+ CLEANUP_PREFIX_RT_EXPIRE, /* update the lifetime of the prefix route */
|
||||
+};
|
||||
+
|
||||
+/*
|
||||
+ * Check, whether the prefix for ifp would still need a prefix route
|
||||
+ * after deleting ifp. The function returns one of the CLEANUP_PREFIX_RT_*
|
||||
+ * constants.
|
||||
+ *
|
||||
+ * 1) we don't purge prefix if address was not permanent.
|
||||
+ * prefix is managed by its own lifetime.
|
||||
+ * 2) we also don't purge, if the address was IFA_F_NOPREFIXROUTE.
|
||||
+ * 3) if there are no addresses, delete prefix.
|
||||
+ * 4) if there are still other permanent address(es),
|
||||
+ * corresponding prefix is still permanent.
|
||||
+ * 5) if there are still other addresses with IFA_F_NOPREFIXROUTE,
|
||||
+ * don't purge the prefix, assume user space is managing it.
|
||||
+ * 6) otherwise, update prefix lifetime to the
|
||||
+ * longest valid lifetime among the corresponding
|
||||
+ * addresses on the device.
|
||||
+ * Note: subsequent RA will update lifetime.
|
||||
+ **/
|
||||
+static enum cleanup_prefix_rt_t
|
||||
+check_cleanup_prefix_route(struct inet6_ifaddr *ifp, unsigned long *expires)
|
||||
+{
|
||||
+ struct inet6_ifaddr *ifa;
|
||||
+ struct inet6_dev *idev = ifp->idev;
|
||||
+ unsigned long lifetime;
|
||||
+ enum cleanup_prefix_rt_t action = CLEANUP_PREFIX_RT_DEL;
|
||||
+
|
||||
+ *expires = jiffies;
|
||||
+
|
||||
+ list_for_each_entry(ifa, &idev->addr_list, if_list) {
|
||||
+ if (ifa == ifp)
|
||||
+ continue;
|
||||
+ if (!ipv6_prefix_equal(&ifa->addr, &ifp->addr,
|
||||
+ ifp->prefix_len))
|
||||
+ continue;
|
||||
+ if (ifa->flags & (IFA_F_PERMANENT | IFA_F_NOPREFIXROUTE))
|
||||
+ return CLEANUP_PREFIX_RT_NOP;
|
||||
+
|
||||
+ action = CLEANUP_PREFIX_RT_EXPIRE;
|
||||
+
|
||||
+ spin_lock(&ifa->lock);
|
||||
+
|
||||
+ lifetime = addrconf_timeout_fixup(ifa->valid_lft, HZ);
|
||||
+ /*
|
||||
+ * Note: Because this address is
|
||||
+ * not permanent, lifetime <
|
||||
+ * LONG_MAX / HZ here.
|
||||
+ */
|
||||
+ if (time_before(*expires, ifa->tstamp + lifetime * HZ))
|
||||
+ *expires = ifa->tstamp + lifetime * HZ;
|
||||
+ spin_unlock(&ifa->lock);
|
||||
+ }
|
||||
+
|
||||
+ return action;
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+cleanup_prefix_route(struct inet6_ifaddr *ifp, unsigned long expires, bool del_rt)
|
||||
+{
|
||||
+ struct rt6_info *rt;
|
||||
+
|
||||
+ rt = addrconf_get_prefix_route(&ifp->addr,
|
||||
+ ifp->prefix_len,
|
||||
+ ifp->idev->dev,
|
||||
+ 0, RTF_GATEWAY | RTF_DEFAULT);
|
||||
+ if (rt) {
|
||||
+ if (del_rt)
|
||||
+ ip6_del_rt(rt);
|
||||
+ else {
|
||||
+ if (!(rt->rt6i_flags & RTF_EXPIRES))
|
||||
+ rt6_set_expires(rt, expires);
|
||||
+ ip6_rt_put(rt);
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+
|
||||
/* This function wants to get referenced ifp and releases it before return */
|
||||
|
||||
static void ipv6_del_addr(struct inet6_ifaddr *ifp)
|
||||
{
|
||||
- struct inet6_ifaddr *ifa, *ifn;
|
||||
- struct inet6_dev *idev = ifp->idev;
|
||||
int state;
|
||||
- int deleted = 0, onlink = 0;
|
||||
- unsigned long expires = jiffies;
|
||||
+ enum cleanup_prefix_rt_t action = CLEANUP_PREFIX_RT_NOP;
|
||||
+ unsigned long expires;
|
||||
|
||||
spin_lock_bh(&ifp->state_lock);
|
||||
state = ifp->state;
|
||||
@@ -913,7 +993,7 @@ static void ipv6_del_addr(struct inet6_ifaddr *ifp)
|
||||
hlist_del_init_rcu(&ifp->addr_lst);
|
||||
spin_unlock_bh(&addrconf_hash_lock);
|
||||
|
||||
- write_lock_bh(&idev->lock);
|
||||
+ write_lock_bh(&ifp->idev->lock);
|
||||
|
||||
if (ifp->flags&IFA_F_TEMPORARY) {
|
||||
list_del(&ifp->tmp_list);
|
||||
@@ -924,45 +1004,13 @@ static void ipv6_del_addr(struct inet6_ifaddr *ifp)
|
||||
__in6_ifa_put(ifp);
|
||||
}
|
||||
|
||||
- list_for_each_entry_safe(ifa, ifn, &idev->addr_list, if_list) {
|
||||
- if (ifa == ifp) {
|
||||
- list_del_init(&ifp->if_list);
|
||||
- __in6_ifa_put(ifp);
|
||||
+ if (ifp->flags & IFA_F_PERMANENT && !(ifp->flags & IFA_F_NOPREFIXROUTE))
|
||||
+ action = check_cleanup_prefix_route(ifp, &expires);
|
||||
|
||||
- if (!(ifp->flags & IFA_F_PERMANENT) || onlink > 0)
|
||||
- break;
|
||||
- deleted = 1;
|
||||
- continue;
|
||||
- } else if (ifp->flags & IFA_F_PERMANENT) {
|
||||
- if (ipv6_prefix_equal(&ifa->addr, &ifp->addr,
|
||||
- ifp->prefix_len)) {
|
||||
- if (ifa->flags & IFA_F_PERMANENT) {
|
||||
- onlink = 1;
|
||||
- if (deleted)
|
||||
- break;
|
||||
- } else {
|
||||
- unsigned long lifetime;
|
||||
-
|
||||
- if (!onlink)
|
||||
- onlink = -1;
|
||||
-
|
||||
- spin_lock(&ifa->lock);
|
||||
-
|
||||
- lifetime = addrconf_timeout_fixup(ifa->valid_lft, HZ);
|
||||
- /*
|
||||
- * Note: Because this address is
|
||||
- * not permanent, lifetime <
|
||||
- * LONG_MAX / HZ here.
|
||||
- */
|
||||
- if (time_before(expires,
|
||||
- ifa->tstamp + lifetime * HZ))
|
||||
- expires = ifa->tstamp + lifetime * HZ;
|
||||
- spin_unlock(&ifa->lock);
|
||||
- }
|
||||
- }
|
||||
- }
|
||||
- }
|
||||
- write_unlock_bh(&idev->lock);
|
||||
+ list_del_init(&ifp->if_list);
|
||||
+ __in6_ifa_put(ifp);
|
||||
+
|
||||
+ write_unlock_bh(&ifp->idev->lock);
|
||||
|
||||
addrconf_del_dad_timer(ifp);
|
||||
|
||||
@@ -970,41 +1018,9 @@ static void ipv6_del_addr(struct inet6_ifaddr *ifp)
|
||||
|
||||
inet6addr_notifier_call_chain(NETDEV_DOWN, ifp);
|
||||
|
||||
- /*
|
||||
- * Purge or update corresponding prefix
|
||||
- *
|
||||
- * 1) we don't purge prefix here if address was not permanent.
|
||||
- * prefix is managed by its own lifetime.
|
||||
- * 2) if there're no addresses, delete prefix.
|
||||
- * 3) if there're still other permanent address(es),
|
||||
- * corresponding prefix is still permanent.
|
||||
- * 4) otherwise, update prefix lifetime to the
|
||||
- * longest valid lifetime among the corresponding
|
||||
- * addresses on the device.
|
||||
- * Note: subsequent RA will update lifetime.
|
||||
- *
|
||||
- * --yoshfuji
|
||||
- */
|
||||
- if ((ifp->flags & IFA_F_PERMANENT) && onlink < 1) {
|
||||
- struct in6_addr prefix;
|
||||
- struct rt6_info *rt;
|
||||
-
|
||||
- ipv6_addr_prefix(&prefix, &ifp->addr, ifp->prefix_len);
|
||||
-
|
||||
- rt = addrconf_get_prefix_route(&prefix,
|
||||
- ifp->prefix_len,
|
||||
- ifp->idev->dev,
|
||||
- 0, RTF_GATEWAY | RTF_DEFAULT);
|
||||
-
|
||||
- if (rt) {
|
||||
- if (onlink == 0) {
|
||||
- ip6_del_rt(rt);
|
||||
- rt = NULL;
|
||||
- } else if (!(rt->rt6i_flags & RTF_EXPIRES)) {
|
||||
- rt6_set_expires(rt, expires);
|
||||
- }
|
||||
- }
|
||||
- ip6_rt_put(rt);
|
||||
+ if (action != CLEANUP_PREFIX_RT_NOP) {
|
||||
+ cleanup_prefix_route(ifp, expires,
|
||||
+ action == CLEANUP_PREFIX_RT_DEL);
|
||||
}
|
||||
|
||||
/* clean up prefsrc entries */
|
||||
@@ -1024,7 +1040,7 @@ static int ipv6_create_tempaddr(struct inet6_ifaddr *ifp, struct inet6_ifaddr *i
|
||||
u32 addr_flags;
|
||||
unsigned long now = jiffies;
|
||||
|
||||
- write_lock(&idev->lock);
|
||||
+ write_lock_bh(&idev->lock);
|
||||
if (ift) {
|
||||
spin_lock_bh(&ift->lock);
|
||||
memcpy(&addr.s6_addr[8], &ift->addr.s6_addr[8], 8);
|
||||
@@ -1036,7 +1052,7 @@ static int ipv6_create_tempaddr(struct inet6_ifaddr *ifp, struct inet6_ifaddr *i
|
||||
retry:
|
||||
in6_dev_hold(idev);
|
||||
if (idev->cnf.use_tempaddr <= 0) {
|
||||
- write_unlock(&idev->lock);
|
||||
+ write_unlock_bh(&idev->lock);
|
||||
pr_info("%s: use_tempaddr is disabled\n", __func__);
|
||||
in6_dev_put(idev);
|
||||
ret = -1;
|
||||
@@ -1046,7 +1062,7 @@ retry:
|
||||
if (ifp->regen_count++ >= idev->cnf.regen_max_retry) {
|
||||
idev->cnf.use_tempaddr = -1; /*XXX*/
|
||||
spin_unlock_bh(&ifp->lock);
|
||||
- write_unlock(&idev->lock);
|
||||
+ write_unlock_bh(&idev->lock);
|
||||
pr_warn("%s: regeneration time exceeded - disabled temporary address support\n",
|
||||
__func__);
|
||||
in6_dev_put(idev);
|
||||
@@ -1072,7 +1088,7 @@ retry:
|
||||
regen_advance = idev->cnf.regen_max_retry *
|
||||
idev->cnf.dad_transmits *
|
||||
idev->nd_parms->retrans_time / HZ;
|
||||
- write_unlock(&idev->lock);
|
||||
+ write_unlock_bh(&idev->lock);
|
||||
|
||||
/* A temporary address is created only if this calculated Preferred
|
||||
* Lifetime is greater than REGEN_ADVANCE time units. In particular,
|
||||
@@ -1099,7 +1115,7 @@ retry:
|
||||
in6_dev_put(idev);
|
||||
pr_info("%s: retry temporary address regeneration\n", __func__);
|
||||
tmpaddr = &addr;
|
||||
- write_lock(&idev->lock);
|
||||
+ write_lock_bh(&idev->lock);
|
||||
goto retry;
|
||||
}
|
||||
|
||||
@@ -1200,7 +1216,7 @@ static int ipv6_get_saddr_eval(struct net *net,
|
||||
* | d is scope of the destination.
|
||||
* B-d | \
|
||||
* | \ <- smaller scope is better if
|
||||
- * B-15 | \ if scope is enough for destinaion.
|
||||
+ * B-15 | \ if scope is enough for destination.
|
||||
* | ret = B - scope (-1 <= scope >= d <= 15).
|
||||
* d-C-1 | /
|
||||
* |/ <- greater is better
|
||||
@@ -1407,7 +1423,7 @@ try_nextdev:
|
||||
EXPORT_SYMBOL(ipv6_dev_get_saddr);
|
||||
|
||||
int __ipv6_get_lladdr(struct inet6_dev *idev, struct in6_addr *addr,
|
||||
- unsigned char banned_flags)
|
||||
+ u32 banned_flags)
|
||||
{
|
||||
struct inet6_ifaddr *ifp;
|
||||
int err = -EADDRNOTAVAIL;
|
||||
@@ -1424,7 +1440,7 @@ int __ipv6_get_lladdr(struct inet6_dev *idev, struct in6_addr *addr,
|
||||
}
|
||||
|
||||
int ipv6_get_lladdr(struct net_device *dev, struct in6_addr *addr,
|
||||
- unsigned char banned_flags)
|
||||
+ u32 banned_flags)
|
||||
{
|
||||
struct inet6_dev *idev;
|
||||
int err = -EADDRNOTAVAIL;
|
||||
@@ -2016,6 +2032,73 @@ static struct inet6_dev *addrconf_add_dev(struct net_device *dev)
|
||||
return idev;
|
||||
}
|
||||
|
||||
+static void manage_tempaddrs(struct inet6_dev *idev,
|
||||
+ struct inet6_ifaddr *ifp,
|
||||
+ __u32 valid_lft, __u32 prefered_lft,
|
||||
+ bool create, unsigned long now)
|
||||
+{
|
||||
+ u32 flags;
|
||||
+ struct inet6_ifaddr *ift;
|
||||
+
|
||||
+ read_lock_bh(&idev->lock);
|
||||
+ /* update all temporary addresses in the list */
|
||||
+ list_for_each_entry(ift, &idev->tempaddr_list, tmp_list) {
|
||||
+ int age, max_valid, max_prefered;
|
||||
+
|
||||
+ if (ifp != ift->ifpub)
|
||||
+ continue;
|
||||
+
|
||||
+ /* RFC 4941 section 3.3:
|
||||
+ * If a received option will extend the lifetime of a public
|
||||
+ * address, the lifetimes of temporary addresses should
|
||||
+ * be extended, subject to the overall constraint that no
|
||||
+ * temporary addresses should ever remain "valid" or "preferred"
|
||||
+ * for a time longer than (TEMP_VALID_LIFETIME) or
|
||||
+ * (TEMP_PREFERRED_LIFETIME - DESYNC_FACTOR), respectively.
|
||||
+ */
|
||||
+ age = (now - ift->cstamp) / HZ;
|
||||
+ max_valid = idev->cnf.temp_valid_lft - age;
|
||||
+ if (max_valid < 0)
|
||||
+ max_valid = 0;
|
||||
+
|
||||
+ max_prefered = idev->cnf.temp_prefered_lft -
|
||||
+ idev->cnf.max_desync_factor - age;
|
||||
+ if (max_prefered < 0)
|
||||
+ max_prefered = 0;
|
||||
+
|
||||
+ if (valid_lft > max_valid)
|
||||
+ valid_lft = max_valid;
|
||||
+
|
||||
+ if (prefered_lft > max_prefered)
|
||||
+ prefered_lft = max_prefered;
|
||||
+
|
||||
+ spin_lock(&ift->lock);
|
||||
+ flags = ift->flags;
|
||||
+ ift->valid_lft = valid_lft;
|
||||
+ ift->prefered_lft = prefered_lft;
|
||||
+ ift->tstamp = now;
|
||||
+ if (prefered_lft > 0)
|
||||
+ ift->flags &= ~IFA_F_DEPRECATED;
|
||||
+
|
||||
+ spin_unlock(&ift->lock);
|
||||
+ if (!(flags&IFA_F_TENTATIVE))
|
||||
+ ipv6_ifa_notify(0, ift);
|
||||
+ }
|
||||
+
|
||||
+ if ((create || list_empty(&idev->tempaddr_list)) &&
|
||||
+ idev->cnf.use_tempaddr > 0) {
|
||||
+ /* When a new public address is created as described
|
||||
+ * in [ADDRCONF], also create a new temporary address.
|
||||
+ * Also create a temporary address if it's enabled but
|
||||
+ * no temporary address currently exists.
|
||||
+ */
|
||||
+ read_unlock_bh(&idev->lock);
|
||||
+ ipv6_create_tempaddr(ifp, NULL);
|
||||
+ } else {
|
||||
+ read_unlock_bh(&idev->lock);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
void addrconf_prefix_rcv(struct net_device *dev, u8 *opt, int len, bool sllao)
|
||||
{
|
||||
struct prefix_info *pinfo;
|
||||
@@ -2170,6 +2253,7 @@ ok:
|
||||
return;
|
||||
}
|
||||
|
||||
+ ifp->flags |= IFA_F_MANAGETEMPADDR;
|
||||
update_lft = 0;
|
||||
create = 1;
|
||||
ifp->cstamp = jiffies;
|
||||
@@ -2178,9 +2262,8 @@ ok:
|
||||
}
|
||||
|
||||
if (ifp) {
|
||||
- int flags;
|
||||
+ u32 flags;
|
||||
unsigned long now;
|
||||
- struct inet6_ifaddr *ift;
|
||||
u32 stored_lft;
|
||||
|
||||
/* update lifetime (RFC2462 5.5.3 e) */
|
||||
@@ -2221,70 +2304,8 @@ ok:
|
||||
} else
|
||||
spin_unlock(&ifp->lock);
|
||||
|
||||
- read_lock_bh(&in6_dev->lock);
|
||||
- /* update all temporary addresses in the list */
|
||||
- list_for_each_entry(ift, &in6_dev->tempaddr_list,
|
||||
- tmp_list) {
|
||||
- int age, max_valid, max_prefered;
|
||||
-
|
||||
- if (ifp != ift->ifpub)
|
||||
- continue;
|
||||
-
|
||||
- /*
|
||||
- * RFC 4941 section 3.3:
|
||||
- * If a received option will extend the lifetime
|
||||
- * of a public address, the lifetimes of
|
||||
- * temporary addresses should be extended,
|
||||
- * subject to the overall constraint that no
|
||||
- * temporary addresses should ever remain
|
||||
- * "valid" or "preferred" for a time longer than
|
||||
- * (TEMP_VALID_LIFETIME) or
|
||||
- * (TEMP_PREFERRED_LIFETIME - DESYNC_FACTOR),
|
||||
- * respectively.
|
||||
- */
|
||||
- age = (now - ift->cstamp) / HZ;
|
||||
- max_valid = in6_dev->cnf.temp_valid_lft - age;
|
||||
- if (max_valid < 0)
|
||||
- max_valid = 0;
|
||||
-
|
||||
- max_prefered = in6_dev->cnf.temp_prefered_lft -
|
||||
- in6_dev->cnf.max_desync_factor -
|
||||
- age;
|
||||
- if (max_prefered < 0)
|
||||
- max_prefered = 0;
|
||||
-
|
||||
- if (valid_lft > max_valid)
|
||||
- valid_lft = max_valid;
|
||||
-
|
||||
- if (prefered_lft > max_prefered)
|
||||
- prefered_lft = max_prefered;
|
||||
-
|
||||
- spin_lock(&ift->lock);
|
||||
- flags = ift->flags;
|
||||
- ift->valid_lft = valid_lft;
|
||||
- ift->prefered_lft = prefered_lft;
|
||||
- ift->tstamp = now;
|
||||
- if (prefered_lft > 0)
|
||||
- ift->flags &= ~IFA_F_DEPRECATED;
|
||||
-
|
||||
- spin_unlock(&ift->lock);
|
||||
- if (!(flags&IFA_F_TENTATIVE))
|
||||
- ipv6_ifa_notify(0, ift);
|
||||
- }
|
||||
-
|
||||
- if ((create || list_empty(&in6_dev->tempaddr_list)) && in6_dev->cnf.use_tempaddr > 0) {
|
||||
- /*
|
||||
- * When a new public address is created as
|
||||
- * described in [ADDRCONF], also create a new
|
||||
- * temporary address. Also create a temporary
|
||||
- * address if it's enabled but no temporary
|
||||
- * address currently exists.
|
||||
- */
|
||||
- read_unlock_bh(&in6_dev->lock);
|
||||
- ipv6_create_tempaddr(ifp, NULL);
|
||||
- } else {
|
||||
- read_unlock_bh(&in6_dev->lock);
|
||||
- }
|
||||
+ manage_tempaddrs(in6_dev, ifp, valid_lft, prefered_lft,
|
||||
+ create, now);
|
||||
|
||||
in6_ifa_put(ifp);
|
||||
addrconf_verify(0);
|
||||
@@ -2363,10 +2384,11 @@ err_exit:
|
||||
/*
|
||||
* Manual configuration of address on an interface
|
||||
*/
|
||||
-static int inet6_addr_add(struct net *net, int ifindex, const struct in6_addr *pfx,
|
||||
+static int inet6_addr_add(struct net *net, int ifindex,
|
||||
+ const struct in6_addr *pfx,
|
||||
const struct in6_addr *peer_pfx,
|
||||
- unsigned int plen, __u8 ifa_flags, __u32 prefered_lft,
|
||||
- __u32 valid_lft)
|
||||
+ unsigned int plen, __u32 ifa_flags,
|
||||
+ __u32 prefered_lft, __u32 valid_lft)
|
||||
{
|
||||
struct inet6_ifaddr *ifp;
|
||||
struct inet6_dev *idev;
|
||||
@@ -2385,6 +2407,9 @@ static int inet6_addr_add(struct net *net, int ifindex, const struct in6_addr *p
|
||||
if (!valid_lft || prefered_lft > valid_lft)
|
||||
return -EINVAL;
|
||||
|
||||
+ if (ifa_flags & IFA_F_MANAGETEMPADDR && plen != 64)
|
||||
+ return -EINVAL;
|
||||
+
|
||||
dev = __dev_get_by_index(net, ifindex);
|
||||
if (!dev)
|
||||
return -ENODEV;
|
||||
@@ -2417,14 +2442,20 @@ static int inet6_addr_add(struct net *net, int ifindex, const struct in6_addr *p
|
||||
valid_lft, prefered_lft);
|
||||
|
||||
if (!IS_ERR(ifp)) {
|
||||
- addrconf_prefix_route(&ifp->addr, ifp->prefix_len, dev,
|
||||
- expires, flags);
|
||||
+ if (!(ifa_flags & IFA_F_NOPREFIXROUTE)) {
|
||||
+ addrconf_prefix_route(&ifp->addr, ifp->prefix_len, dev,
|
||||
+ expires, flags);
|
||||
+ }
|
||||
+
|
||||
/*
|
||||
* Note that section 3.1 of RFC 4429 indicates
|
||||
* that the Optimistic flag should not be set for
|
||||
* manually configured addresses
|
||||
*/
|
||||
addrconf_dad_start(ifp);
|
||||
+ if (ifa_flags & IFA_F_MANAGETEMPADDR)
|
||||
+ manage_tempaddrs(idev, ifp, valid_lft, prefered_lft,
|
||||
+ true, jiffies);
|
||||
in6_ifa_put(ifp);
|
||||
addrconf_verify(0);
|
||||
return 0;
|
||||
@@ -2857,7 +2888,7 @@ static int addrconf_notify(struct notifier_block *this, unsigned long event,
|
||||
}
|
||||
|
||||
/*
|
||||
- * MTU falled under IPV6_MIN_MTU.
|
||||
+ * if MTU under IPV6_MIN_MTU.
|
||||
* Stop IPv6 on this interface.
|
||||
*/
|
||||
|
||||
@@ -3366,7 +3397,7 @@ static void if6_seq_stop(struct seq_file *seq, void *v)
|
||||
static int if6_seq_show(struct seq_file *seq, void *v)
|
||||
{
|
||||
struct inet6_ifaddr *ifp = (struct inet6_ifaddr *)v;
|
||||
- seq_printf(seq, "%pi6 %02x %02x %02x %02x %8s\n",
|
||||
+ seq_printf(seq, "%pi6 %02x %02x %02x %03x %8s\n",
|
||||
&ifp->addr,
|
||||
ifp->idev->dev->ifindex,
|
||||
ifp->prefix_len,
|
||||
@@ -3593,6 +3624,7 @@ static const struct nla_policy ifa_ipv6_policy[IFA_MAX+1] = {
|
||||
[IFA_ADDRESS] = { .len = sizeof(struct in6_addr) },
|
||||
[IFA_LOCAL] = { .len = sizeof(struct in6_addr) },
|
||||
[IFA_CACHEINFO] = { .len = sizeof(struct ifa_cacheinfo) },
|
||||
+ [IFA_FLAGS] = { .len = sizeof(u32) },
|
||||
};
|
||||
|
||||
static int
|
||||
@@ -3616,16 +3648,22 @@ inet6_rtm_deladdr(struct sk_buff *skb, struct nlmsghdr *nlh)
|
||||
return inet6_addr_del(net, ifm->ifa_index, pfx, ifm->ifa_prefixlen);
|
||||
}
|
||||
|
||||
-static int inet6_addr_modify(struct inet6_ifaddr *ifp, u8 ifa_flags,
|
||||
+static int inet6_addr_modify(struct inet6_ifaddr *ifp, u32 ifa_flags,
|
||||
u32 prefered_lft, u32 valid_lft)
|
||||
{
|
||||
u32 flags;
|
||||
clock_t expires;
|
||||
unsigned long timeout;
|
||||
+ bool was_managetempaddr;
|
||||
+ bool had_prefixroute;
|
||||
|
||||
if (!valid_lft || (prefered_lft > valid_lft))
|
||||
return -EINVAL;
|
||||
|
||||
+ if (ifa_flags & IFA_F_MANAGETEMPADDR &&
|
||||
+ (ifp->flags & IFA_F_TEMPORARY || ifp->prefix_len != 64))
|
||||
+ return -EINVAL;
|
||||
+
|
||||
timeout = addrconf_timeout_fixup(valid_lft, HZ);
|
||||
if (addrconf_finite_timeout(timeout)) {
|
||||
expires = jiffies_to_clock_t(timeout * HZ);
|
||||
@@ -3645,7 +3683,13 @@ static int inet6_addr_modify(struct inet6_ifaddr *ifp, u8 ifa_flags,
|
||||
}
|
||||
|
||||
spin_lock_bh(&ifp->lock);
|
||||
- ifp->flags = (ifp->flags & ~(IFA_F_DEPRECATED | IFA_F_PERMANENT | IFA_F_NODAD | IFA_F_HOMEADDRESS)) | ifa_flags;
|
||||
+ was_managetempaddr = ifp->flags & IFA_F_MANAGETEMPADDR;
|
||||
+ had_prefixroute = ifp->flags & IFA_F_PERMANENT &&
|
||||
+ !(ifp->flags & IFA_F_NOPREFIXROUTE);
|
||||
+ ifp->flags &= ~(IFA_F_DEPRECATED | IFA_F_PERMANENT | IFA_F_NODAD |
|
||||
+ IFA_F_HOMEADDRESS | IFA_F_MANAGETEMPADDR |
|
||||
+ IFA_F_NOPREFIXROUTE);
|
||||
+ ifp->flags |= ifa_flags;
|
||||
ifp->tstamp = jiffies;
|
||||
ifp->valid_lft = valid_lft;
|
||||
ifp->prefered_lft = prefered_lft;
|
||||
@@ -3654,8 +3698,30 @@ static int inet6_addr_modify(struct inet6_ifaddr *ifp, u8 ifa_flags,
|
||||
if (!(ifp->flags&IFA_F_TENTATIVE))
|
||||
ipv6_ifa_notify(0, ifp);
|
||||
|
||||
- addrconf_prefix_route(&ifp->addr, ifp->prefix_len, ifp->idev->dev,
|
||||
- expires, flags);
|
||||
+ if (!(ifa_flags & IFA_F_NOPREFIXROUTE)) {
|
||||
+ addrconf_prefix_route(&ifp->addr, ifp->prefix_len, ifp->idev->dev,
|
||||
+ expires, flags);
|
||||
+ } else if (had_prefixroute) {
|
||||
+ enum cleanup_prefix_rt_t action;
|
||||
+ unsigned long rt_expires;
|
||||
+
|
||||
+ write_lock_bh(&ifp->idev->lock);
|
||||
+ action = check_cleanup_prefix_route(ifp, &rt_expires);
|
||||
+ write_unlock_bh(&ifp->idev->lock);
|
||||
+
|
||||
+ if (action != CLEANUP_PREFIX_RT_NOP) {
|
||||
+ cleanup_prefix_route(ifp, rt_expires,
|
||||
+ action == CLEANUP_PREFIX_RT_DEL);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if (was_managetempaddr || ifp->flags & IFA_F_MANAGETEMPADDR) {
|
||||
+ if (was_managetempaddr && !(ifp->flags & IFA_F_MANAGETEMPADDR))
|
||||
+ valid_lft = prefered_lft = 0;
|
||||
+ manage_tempaddrs(ifp->idev, ifp, valid_lft, prefered_lft,
|
||||
+ !was_managetempaddr, jiffies);
|
||||
+ }
|
||||
+
|
||||
addrconf_verify(0);
|
||||
|
||||
return 0;
|
||||
@@ -3671,7 +3737,7 @@ inet6_rtm_newaddr(struct sk_buff *skb, struct nlmsghdr *nlh)
|
||||
struct inet6_ifaddr *ifa;
|
||||
struct net_device *dev;
|
||||
u32 valid_lft = INFINITY_LIFE_TIME, preferred_lft = INFINITY_LIFE_TIME;
|
||||
- u8 ifa_flags;
|
||||
+ u32 ifa_flags;
|
||||
int err;
|
||||
|
||||
err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, ifa_ipv6_policy);
|
||||
@@ -3698,14 +3764,17 @@ inet6_rtm_newaddr(struct sk_buff *skb, struct nlmsghdr *nlh)
|
||||
if (dev == NULL)
|
||||
return -ENODEV;
|
||||
|
||||
+ ifa_flags = tb[IFA_FLAGS] ? nla_get_u32(tb[IFA_FLAGS]) : ifm->ifa_flags;
|
||||
+
|
||||
/* We ignore other flags so far. */
|
||||
- ifa_flags = ifm->ifa_flags & (IFA_F_NODAD | IFA_F_HOMEADDRESS);
|
||||
+ ifa_flags &= IFA_F_NODAD | IFA_F_HOMEADDRESS | IFA_F_MANAGETEMPADDR |
|
||||
+ IFA_F_NOPREFIXROUTE;
|
||||
|
||||
ifa = ipv6_get_ifaddr(net, pfx, dev, 1);
|
||||
if (ifa == NULL) {
|
||||
/*
|
||||
* It would be best to check for !NLM_F_CREATE here but
|
||||
- * userspace alreay relies on not having to provide this.
|
||||
+ * userspace already relies on not having to provide this.
|
||||
*/
|
||||
return inet6_addr_add(net, ifm->ifa_index, pfx, peer_pfx,
|
||||
ifm->ifa_prefixlen, ifa_flags,
|
||||
@@ -3723,7 +3792,7 @@ inet6_rtm_newaddr(struct sk_buff *skb, struct nlmsghdr *nlh)
|
||||
return err;
|
||||
}
|
||||
|
||||
-static void put_ifaddrmsg(struct nlmsghdr *nlh, u8 prefixlen, u8 flags,
|
||||
+static void put_ifaddrmsg(struct nlmsghdr *nlh, u8 prefixlen, u32 flags,
|
||||
u8 scope, int ifindex)
|
||||
{
|
||||
struct ifaddrmsg *ifm;
|
||||
@@ -3766,7 +3835,8 @@ static inline int inet6_ifaddr_msgsize(void)
|
||||
return NLMSG_ALIGN(sizeof(struct ifaddrmsg))
|
||||
+ nla_total_size(16) /* IFA_LOCAL */
|
||||
+ nla_total_size(16) /* IFA_ADDRESS */
|
||||
- + nla_total_size(sizeof(struct ifa_cacheinfo));
|
||||
+ + nla_total_size(sizeof(struct ifa_cacheinfo))
|
||||
+ + nla_total_size(4) /* IFA_FLAGS */;
|
||||
}
|
||||
|
||||
static int inet6_fill_ifaddr(struct sk_buff *skb, struct inet6_ifaddr *ifa,
|
||||
@@ -3815,6 +3885,9 @@ static int inet6_fill_ifaddr(struct sk_buff *skb, struct inet6_ifaddr *ifa,
|
||||
if (put_cacheinfo(skb, ifa->cstamp, ifa->tstamp, preferred, valid) < 0)
|
||||
goto error;
|
||||
|
||||
+ if (nla_put_u32(skb, IFA_FLAGS, ifa->flags) < 0)
|
||||
+ goto error;
|
||||
+
|
||||
return nlmsg_end(skb, nlh);
|
||||
|
||||
error:
|
||||
_______________________________________________
|
||||
kernel mailing list
|
||||
kernel@lists.fedoraproject.org
|
||||
https://admin.fedoraproject.org/mailman/listinfo/kernel
|
|
@ -1,39 +0,0 @@
|
|||
Bugzilla: 1065663
|
||||
Upstream-status: 3.14
|
||||
|
||||
From ec6f678c74dbdb06a6a775bbb00f1d26c17c404b Mon Sep 17 00:00:00 2001
|
||||
From: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
|
||||
Date: Tue, 18 Feb 2014 10:30:18 +0200
|
||||
Subject: [PATCH] iwlwifi: dvm: clear IWL_STA_UCODE_INPROGRESS when assoc fails
|
||||
|
||||
We set IWL_STA_UCODE_INPROGRESS flag when we add a station
|
||||
and clear it when we send the LQ command for it. But the LQ
|
||||
command is sent only when the association succeeds.
|
||||
If the association doesn't succeed, we would leave this flag
|
||||
set and that wouldn't indicate the station entry as vacant.
|
||||
|
||||
This probably fixes:
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1065663
|
||||
|
||||
Cc: <stable@vger.kernel.org>
|
||||
Reviewed-by: Johannes Berg <johannes.berg@intel.com>
|
||||
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
|
||||
---
|
||||
drivers/net/wireless/iwlwifi/dvm/sta.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/drivers/net/wireless/iwlwifi/dvm/sta.c b/drivers/net/wireless/iwlwifi/dvm/sta.c
|
||||
index c0d070c..9cdd91c 100644
|
||||
--- a/drivers/net/wireless/iwlwifi/dvm/sta.c
|
||||
+++ b/drivers/net/wireless/iwlwifi/dvm/sta.c
|
||||
@@ -590,6 +590,7 @@ void iwl_deactivate_station(struct iwl_priv *priv, const u8 sta_id,
|
||||
sizeof(priv->tid_data[sta_id][tid]));
|
||||
|
||||
priv->stations[sta_id].used &= ~IWL_STA_DRIVER_ACTIVE;
|
||||
+ priv->stations[sta_id].used &= ~IWL_STA_UCODE_INPROGRESS;
|
||||
|
||||
priv->num_stations--;
|
||||
|
||||
--
|
||||
1.8.5.3
|
||||
|
116
kernel.spec
116
kernel.spec
|
@ -68,13 +68,13 @@ Summary: The Linux kernel
|
|||
# base_sublevel is the kernel version we're starting with and patching
|
||||
# on top of -- for example, 3.1-rc7-git1 starts with a 3.0 base,
|
||||
# which yields a base_sublevel of 0.
|
||||
%define base_sublevel 13
|
||||
%define base_sublevel 14
|
||||
|
||||
## If this is a released kernel ##
|
||||
%if 0%{?released_kernel}
|
||||
|
||||
# Do we have a -stable update to apply?
|
||||
%define stable_update 10
|
||||
%define stable_update 1
|
||||
# Is it a -stable RC?
|
||||
%define stable_rc 0
|
||||
# Set rpm version accordingly
|
||||
|
@ -685,15 +685,14 @@ Patch21010: arm-omap-load-tfp410.patch
|
|||
# ARM tegra
|
||||
Patch21020: arm-tegra-usb-no-reset-linux33.patch
|
||||
|
||||
# Add panel support for tegra paz00
|
||||
# Backported from linux-next scheduled for 3.15
|
||||
Patch21021: arm-tegra-paz00-panel-dts.patch
|
||||
|
||||
# ARM i.MX6
|
||||
# http://www.spinics.net/lists/devicetree/msg08276.html
|
||||
Patch21025: arm-imx6-utilite.patch
|
||||
|
||||
# am33xx (BeagleBone)
|
||||
# https://github.com/beagleboard/kernel
|
||||
# Pulled primarily from the above git repo and should be landing upstream
|
||||
Patch21031: arm-am33xx-bblack.patch
|
||||
|
||||
#rhbz 754518
|
||||
Patch21235: scsi-sd_revalidate_disk-prevent-NULL-ptr-deref.patch
|
||||
|
||||
|
@ -707,61 +706,21 @@ Patch22000: weird-root-dentry-name-debug.patch
|
|||
|
||||
Patch25047: drm-radeon-Disable-writeback-by-default-on-ppc.patch
|
||||
|
||||
# Fix 15sec NFS mount delay
|
||||
Patch25152: sunrpc-create-a-new-dummy-pipe-for-gssd-to-hold-open.patch
|
||||
Patch25153: sunrpc-replace-gssd_running-with-more-reliable-check.patch
|
||||
Patch25154: nfs-check-gssd-running-before-krb5i-auth.patch
|
||||
#rhbz 1037793
|
||||
Patch25166: sunrpc-add-an-info-file-for-the-dummy-gssd-pipe.patch
|
||||
Patch25167: rpc_pipe-remove-the-clntXX-dir-if-creating-the-pipe-fails.patch
|
||||
Patch25168: rpc_pipe-fix-cleanup-of-dummy-gssd-directory-when-notification-fails.patch
|
||||
|
||||
#rhbz 953211
|
||||
Patch25184: Input-ALPS-add-support-for-Dolphin-devices.patch
|
||||
|
||||
#rhbz 1064430 1056711
|
||||
Patch25196: ipv6-introduce-IFA_F_NOPREFIXROUTE-and-IFA_F_MANAGETEMPADDR-flags.patch
|
||||
Patch25197: ipv6-addrconf-revert-if_inet6ifa_flag-format.patch
|
||||
|
||||
#CVE-2014-0069 rhbz 1064253 1062584
|
||||
Patch25201: cifs-sanity-check-length-of-data-to-send-before-sending.patch
|
||||
|
||||
#rhbz 1068862
|
||||
Patch25002: cifs-mask-off-top-byte-in-get_rfc1002_length.patch
|
||||
|
||||
#CVE-2014-0102 rhbz 1071396
|
||||
Patch25026: keyring-fix.patch
|
||||
|
||||
#rhbz 1065087
|
||||
Patch25028: tty-Fix-low_latency-BUG.patch
|
||||
|
||||
#rhbz 1027465
|
||||
Patch25032: HID-Bluetooth-hidp-make-sure-input-buffers-are-big-e.patch
|
||||
|
||||
#rhbz 1013466
|
||||
Patch25033: selinux-put-the-mmap-DAC-controls-before-the-MAC-controls.patch
|
||||
|
||||
#rhbz 1051748
|
||||
Patch25035: Bluetooth-allocate-static-minor-for-vhci.patch
|
||||
|
||||
#rhbz 1065663
|
||||
Patch25040: iwlwifi-dvm-clear-IWL_STA_UCODE_INPROGRESS-when-asso.patch
|
||||
|
||||
#rhbz 1046495
|
||||
Patch25044: iwlwifi-dvm-take-mutex-when-sending-SYNC-BT-config-command.patch
|
||||
|
||||
#CVE-2014-2568 rhbz 1079012 1079013
|
||||
Patch25049: nfqueue-Orphan-frags-in-nfqnl_zcopy-and-handle-error.patch
|
||||
#CVE-2014-0155 rhbz 1081589 1085016
|
||||
Patch25036: KVM-ioapic-fix-assignment-of-ioapic-rtc_status-pending_eoi.patch
|
||||
|
||||
#rhbz 1048314
|
||||
Patch25062: 0001-HID-rmi-introduce-RMI-driver-for-Synaptics-touchpads.patch
|
||||
|
||||
#rhbz 1074235
|
||||
Patch25055: lib-percpu_counter.c-fix-bad-percpu-counter-state-du.patch
|
||||
|
||||
#CVE-2014-0155 rhbz 1081589 1085016
|
||||
Patch25057: KVM-ioapic-fix-assignment-of-ioapic-rtc_status-pending_eoi.patch
|
||||
|
||||
#rhbz 1048314
|
||||
Patch25058: 0001-HID-rmi-introduce-RMI-driver-for-Synaptics-touchpads.patch
|
||||
|
||||
#CVE-2014-2851 rhbz 1086730 1087420
|
||||
Patch25059: net-ipv4-current-group_info-should-be-put-after-using.patch
|
||||
|
||||
|
@ -1321,9 +1280,9 @@ ApplyPatch arm-lpae-ax88796.patch
|
|||
ApplyPatch arm-sound-soc-samsung-dma-avoid-another-64bit-division.patch
|
||||
ApplyPatch arm-omap-load-tfp410.patch
|
||||
ApplyPatch arm-tegra-usb-no-reset-linux33.patch
|
||||
ApplyPatch arm-tegra-paz00-panel-dts.patch
|
||||
ApplyPatch arm-imx6-utilite.patch
|
||||
|
||||
ApplyPatch arm-am33xx-bblack.patch
|
||||
|
||||
#
|
||||
# bugfixes to drivers and filesystems
|
||||
|
@ -1388,8 +1347,6 @@ ApplyPatch crash-driver.patch
|
|||
|
||||
# crypto/
|
||||
|
||||
# keys
|
||||
|
||||
# secure boot
|
||||
ApplyPatch secure-modules.patch
|
||||
ApplyPatch modsign-uefi.patch
|
||||
|
@ -1431,61 +1388,21 @@ ApplyPatch ath9k_rx_dma_stop_check.patch
|
|||
|
||||
ApplyPatch drm-radeon-Disable-writeback-by-default-on-ppc.patch
|
||||
|
||||
# Fix 15sec NFS mount delay
|
||||
ApplyPatch sunrpc-create-a-new-dummy-pipe-for-gssd-to-hold-open.patch
|
||||
ApplyPatch sunrpc-replace-gssd_running-with-more-reliable-check.patch
|
||||
ApplyPatch nfs-check-gssd-running-before-krb5i-auth.patch
|
||||
#rhbz 1037793
|
||||
ApplyPatch rpc_pipe-remove-the-clntXX-dir-if-creating-the-pipe-fails.patch
|
||||
ApplyPatch sunrpc-add-an-info-file-for-the-dummy-gssd-pipe.patch
|
||||
ApplyPatch rpc_pipe-fix-cleanup-of-dummy-gssd-directory-when-notification-fails.patch
|
||||
|
||||
#rhbz 953211
|
||||
ApplyPatch Input-ALPS-add-support-for-Dolphin-devices.patch
|
||||
|
||||
#rhbz 1064430 1056711
|
||||
ApplyPatch ipv6-introduce-IFA_F_NOPREFIXROUTE-and-IFA_F_MANAGETEMPADDR-flags.patch
|
||||
ApplyPatch ipv6-addrconf-revert-if_inet6ifa_flag-format.patch
|
||||
|
||||
#CVE-2014-0069 rhbz 1064253 1062584
|
||||
ApplyPatch cifs-sanity-check-length-of-data-to-send-before-sending.patch
|
||||
|
||||
#rhbz 1068862
|
||||
ApplyPatch cifs-mask-off-top-byte-in-get_rfc1002_length.patch
|
||||
|
||||
#CVE-2014-0102 rhbz 1071396
|
||||
ApplyPatch keyring-fix.patch
|
||||
|
||||
#rhbz 1065087
|
||||
ApplyPatch tty-Fix-low_latency-BUG.patch
|
||||
|
||||
#rhbz 1027465
|
||||
ApplyPatch HID-Bluetooth-hidp-make-sure-input-buffers-are-big-e.patch
|
||||
|
||||
#rhbz 1013466
|
||||
ApplyPatch selinux-put-the-mmap-DAC-controls-before-the-MAC-controls.patch
|
||||
|
||||
#rhbz 1051748
|
||||
ApplyPatch Bluetooth-allocate-static-minor-for-vhci.patch
|
||||
|
||||
#rhbz 1065663
|
||||
ApplyPatch iwlwifi-dvm-clear-IWL_STA_UCODE_INPROGRESS-when-asso.patch
|
||||
|
||||
#rhbz 1046495
|
||||
ApplyPatch iwlwifi-dvm-take-mutex-when-sending-SYNC-BT-config-command.patch
|
||||
|
||||
#CVE-2014-2568 rhbz 1079012 1079013
|
||||
ApplyPatch nfqueue-Orphan-frags-in-nfqnl_zcopy-and-handle-error.patch
|
||||
|
||||
#rhbz 1074235
|
||||
ApplyPatch lib-percpu_counter.c-fix-bad-percpu-counter-state-du.patch
|
||||
|
||||
#CVE-2014-0155 rhbz 1081589 1085016
|
||||
ApplyPatch KVM-ioapic-fix-assignment-of-ioapic-rtc_status-pending_eoi.patch
|
||||
|
||||
#rhbz 1048314
|
||||
ApplyPatch 0001-HID-rmi-introduce-RMI-driver-for-Synaptics-touchpads.patch
|
||||
|
||||
#rhbz 1074235
|
||||
ApplyPatch lib-percpu_counter.c-fix-bad-percpu-counter-state-du.patch
|
||||
|
||||
#CVE-2014-2851 rhbz 1086730 1087420
|
||||
ApplyPatch net-ipv4-current-group_info-should-be-put-after-using.patch
|
||||
|
||||
|
@ -2303,6 +2220,9 @@ fi
|
|||
# ||----w |
|
||||
# || ||
|
||||
%changelog
|
||||
* Mon Apr 21 2014 Justin M. Forbes <jforbes@fedoraproject.org> - 3.14.1-200
|
||||
- Linux v3.14.1
|
||||
|
||||
* Thu Apr 17 2014 Hans de Goede <hdegoede@redhat.com>
|
||||
- Update min/max quirk patch to add a quirk for the ThinkPad L540 (rhbz1088588)
|
||||
|
||||
|
|
|
@ -1,17 +0,0 @@
|
|||
@@ -, +, @@
|
||||
---
|
||||
--- a/security/keys/keyring.c
|
||||
+++ a/security/keys/keyring.c
|
||||
@@ -1000,7 +1000,11 @@ static int keyring_detect_cycle_iterator(const void *object,
|
||||
|
||||
kenter("{%d}", key->serial);
|
||||
|
||||
- BUG_ON(key != ctx->match_data);
|
||||
+ /* We might get a keyring with matching index-key that is nonetheless a
|
||||
+ * different keyring. */
|
||||
+ if (key != ctx->match_data)
|
||||
+ return 0;
|
||||
+
|
||||
ctx->result = ERR_PTR(-EDEADLK);
|
||||
return 1;
|
||||
}
|
|
@ -1,117 +0,0 @@
|
|||
Bugzilla: 1079013
|
||||
Upstream-status: Queued in netdev tree, backport for 3.13.y sent
|
||||
|
||||
From 93f7cfcac69051641d5b10325164a0f313ef5185 Mon Sep 17 00:00:00 2001
|
||||
From: Josh Boyer <jwboyer@fedoraproject.org>
|
||||
Date: Fri, 28 Mar 2014 09:32:19 -0400
|
||||
Subject: [PATCH] nfqueue: Orphan frags in nfqnl_zcopy and handle errors
|
||||
|
||||
Backport of upstream commit 36d5fe6a0007 to 3.13.y
|
||||
|
||||
nfqnl_zcopy can copy elements of the frags array between skbs, but it doesn't
|
||||
orphan them. Also, it doesn't handle errors, so this patch takes care of that
|
||||
as well, and modify the caller accordingly. skb_tx_error() is also added to
|
||||
the callers so they will signal the failed delivery towards the creator of the
|
||||
skb.
|
||||
|
||||
Signed-off-by: Zoltan Kiss <zoltan.kiss@citrix.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
Signed-off-by: Josh Boyer <jwboyer@fedoraproject.org>
|
||||
---
|
||||
net/netfilter/nfnetlink_queue_core.c | 31 ++++++++++++++++++++++---------
|
||||
1 file changed, 22 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/net/netfilter/nfnetlink_queue_core.c b/net/netfilter/nfnetlink_queue_core.c
|
||||
index 21258cf..b241654 100644
|
||||
--- a/net/netfilter/nfnetlink_queue_core.c
|
||||
+++ b/net/netfilter/nfnetlink_queue_core.c
|
||||
@@ -235,22 +235,23 @@ nfqnl_flush(struct nfqnl_instance *queue, nfqnl_cmpfn cmpfn, unsigned long data)
|
||||
spin_unlock_bh(&queue->lock);
|
||||
}
|
||||
|
||||
-static void
|
||||
-nfqnl_zcopy(struct sk_buff *to, const struct sk_buff *from, int len, int hlen)
|
||||
+static int
|
||||
+nfqnl_zcopy(struct sk_buff *to, struct sk_buff *from, int len, int hlen)
|
||||
{
|
||||
int i, j = 0;
|
||||
int plen = 0; /* length of skb->head fragment */
|
||||
+ int ret;
|
||||
struct page *page;
|
||||
unsigned int offset;
|
||||
|
||||
/* dont bother with small payloads */
|
||||
- if (len <= skb_tailroom(to)) {
|
||||
- skb_copy_bits(from, 0, skb_put(to, len), len);
|
||||
- return;
|
||||
- }
|
||||
+ if (len <= skb_tailroom(to))
|
||||
+ return skb_copy_bits(from, 0, skb_put(to, len), len);
|
||||
|
||||
if (hlen) {
|
||||
- skb_copy_bits(from, 0, skb_put(to, hlen), hlen);
|
||||
+ ret = skb_copy_bits(from, 0, skb_put(to, hlen), hlen);
|
||||
+ if (unlikely(ret))
|
||||
+ return ret;
|
||||
len -= hlen;
|
||||
} else {
|
||||
plen = min_t(int, skb_headlen(from), len);
|
||||
@@ -268,6 +269,11 @@ nfqnl_zcopy(struct sk_buff *to, const struct sk_buff *from, int len, int hlen)
|
||||
to->len += len + plen;
|
||||
to->data_len += len + plen;
|
||||
|
||||
+ if (unlikely(skb_orphan_frags(from, GFP_ATOMIC))) {
|
||||
+ skb_tx_error(from);
|
||||
+ return -ENOMEM;
|
||||
+ }
|
||||
+
|
||||
for (i = 0; i < skb_shinfo(from)->nr_frags; i++) {
|
||||
if (!len)
|
||||
break;
|
||||
@@ -278,6 +284,8 @@ nfqnl_zcopy(struct sk_buff *to, const struct sk_buff *from, int len, int hlen)
|
||||
j++;
|
||||
}
|
||||
skb_shinfo(to)->nr_frags = j;
|
||||
+
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
@@ -374,13 +382,16 @@ nfqnl_build_packet_message(struct net *net, struct nfqnl_instance *queue,
|
||||
|
||||
skb = nfnetlink_alloc_skb(net, size, queue->peer_portid,
|
||||
GFP_ATOMIC);
|
||||
- if (!skb)
|
||||
+ if (!skb) {
|
||||
+ skb_tx_error(entskb);
|
||||
return NULL;
|
||||
+ }
|
||||
|
||||
nlh = nlmsg_put(skb, 0, 0,
|
||||
NFNL_SUBSYS_QUEUE << 8 | NFQNL_MSG_PACKET,
|
||||
sizeof(struct nfgenmsg), 0);
|
||||
if (!nlh) {
|
||||
+ skb_tx_error(entskb);
|
||||
kfree_skb(skb);
|
||||
return NULL;
|
||||
}
|
||||
@@ -504,13 +515,15 @@ nfqnl_build_packet_message(struct net *net, struct nfqnl_instance *queue,
|
||||
nla->nla_type = NFQA_PAYLOAD;
|
||||
nla->nla_len = nla_attr_size(data_len);
|
||||
|
||||
- nfqnl_zcopy(skb, entskb, data_len, hlen);
|
||||
+ if (nfqnl_zcopy(skb, entskb, data_len, hlen))
|
||||
+ goto nla_put_failure;
|
||||
}
|
||||
|
||||
nlh->nlmsg_len = skb->len;
|
||||
return skb;
|
||||
|
||||
nla_put_failure:
|
||||
+ skb_tx_error(entskb);
|
||||
kfree_skb(skb);
|
||||
net_err_ratelimited("nf_queue: error creating packet message\n");
|
||||
return NULL;
|
||||
--
|
||||
1.8.5.3
|
||||
|
|
@ -1,53 +0,0 @@
|
|||
Bugzilla: N/A
|
||||
Upstream-status: sent for 3.14
|
||||
|
||||
From 6aa23d76a7b549521a03b63b6d5b7880ea87eab7 Mon Sep 17 00:00:00 2001
|
||||
From: Jeff Layton <jlayton@redhat.com>
|
||||
Date: Thu, 14 Nov 2013 07:25:19 -0500
|
||||
Subject: [PATCH] nfs: check if gssd is running before attempting to use krb5i
|
||||
auth in SETCLIENTID call
|
||||
|
||||
Currently, the client will attempt to use krb5i in the SETCLIENTID call
|
||||
even if rpc.gssd isn't running. When that fails, it'll then fall back to
|
||||
RPC_AUTH_UNIX. This introduced a delay when mounting if rpc.gssd isn't
|
||||
running, and causes warning messages to pop up in the ring buffer.
|
||||
|
||||
Check to see if rpc.gssd is running before even attempting to use krb5i
|
||||
auth, and just silently skip trying to do so if it isn't. In the event
|
||||
that the admin is actually trying to mount with krb5*, it will still
|
||||
fail at a later stage of the mount attempt.
|
||||
|
||||
Signed-off-by: Jeff Layton <jlayton@redhat.com>
|
||||
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
|
||||
---
|
||||
fs/nfs/nfs4client.c | 7 ++++++-
|
||||
1 file changed, 6 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/fs/nfs/nfs4client.c b/fs/nfs/nfs4client.c
|
||||
index b4a160a..c1b7a80 100644
|
||||
--- a/fs/nfs/nfs4client.c
|
||||
+++ b/fs/nfs/nfs4client.c
|
||||
@@ -10,6 +10,7 @@
|
||||
#include <linux/sunrpc/auth.h>
|
||||
#include <linux/sunrpc/xprt.h>
|
||||
#include <linux/sunrpc/bc_xprt.h>
|
||||
+#include <linux/sunrpc/rpc_pipe_fs.h>
|
||||
#include "internal.h"
|
||||
#include "callback.h"
|
||||
#include "delegation.h"
|
||||
@@ -370,7 +371,11 @@ struct nfs_client *nfs4_init_client(struct nfs_client *clp,
|
||||
__set_bit(NFS_CS_INFINITE_SLOTS, &clp->cl_flags);
|
||||
__set_bit(NFS_CS_DISCRTRY, &clp->cl_flags);
|
||||
__set_bit(NFS_CS_NO_RETRANS_TIMEOUT, &clp->cl_flags);
|
||||
- error = nfs_create_rpc_client(clp, timeparms, RPC_AUTH_GSS_KRB5I);
|
||||
+
|
||||
+ error = -EINVAL;
|
||||
+ if (gssd_running(clp->cl_net))
|
||||
+ error = nfs_create_rpc_client(clp, timeparms,
|
||||
+ RPC_AUTH_GSS_KRB5I);
|
||||
if (error == -EINVAL)
|
||||
error = nfs_create_rpc_client(clp, timeparms, RPC_AUTH_UNIX);
|
||||
if (error < 0)
|
||||
--
|
||||
1.8.2.1
|
||||
|
|
@ -1,50 +0,0 @@
|
|||
Bugzilla: 1037793
|
||||
Upstream-status: submitted for 3.14
|
||||
|
||||
Currently, it could leak dentry references in some cases. Make sure
|
||||
we clean up properly.
|
||||
|
||||
Signed-off-by: Jeff Layton <jlayton@redhat.com>
|
||||
---
|
||||
net/sunrpc/rpc_pipe.c | 14 +++++++++++++-
|
||||
1 file changed, 13 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/net/sunrpc/rpc_pipe.c b/net/sunrpc/rpc_pipe.c
|
||||
index 5d973b2..b185548 100644
|
||||
--- a/net/sunrpc/rpc_pipe.c
|
||||
+++ b/net/sunrpc/rpc_pipe.c
|
||||
@@ -1369,6 +1369,18 @@ out:
|
||||
return pipe_dentry;
|
||||
}
|
||||
|
||||
+static void
|
||||
+rpc_gssd_dummy_depopulate(struct dentry *pipe_dentry)
|
||||
+{
|
||||
+ struct dentry *clnt_dir = pipe_dentry->d_parent;
|
||||
+ struct dentry *gssd_dir = clnt_dir->d_parent;
|
||||
+
|
||||
+ __rpc_rmpipe(clnt_dir->d_inode, pipe_dentry);
|
||||
+ __rpc_depopulate(clnt_dir, gssd_dummy_info_file, 0, 1);
|
||||
+ __rpc_depopulate(gssd_dir, gssd_dummy_clnt_dir, 0, 1);
|
||||
+ dput(pipe_dentry);
|
||||
+}
|
||||
+
|
||||
static int
|
||||
rpc_fill_super(struct super_block *sb, void *data, int silent)
|
||||
{
|
||||
@@ -1412,7 +1424,7 @@ rpc_fill_super(struct super_block *sb, void *data, int silent)
|
||||
return 0;
|
||||
|
||||
err_depopulate:
|
||||
- dput(gssd_dentry);
|
||||
+ rpc_gssd_dummy_depopulate(gssd_dentry);
|
||||
blocking_notifier_call_chain(&rpc_pipefs_notifier_list,
|
||||
RPC_PIPEFS_UMOUNT,
|
||||
sb);
|
||||
--
|
||||
1.8.4.2
|
||||
|
||||
--
|
||||
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
|
||||
the body of a message to majordomo@vger.kernel.org
|
||||
More majordomo info at http://vger.kernel.org/majordomo-info.html
|
|
@ -1,32 +0,0 @@
|
|||
Bugzilla: 1037793
|
||||
Upstream-status: submitted for 3.14
|
||||
|
||||
In the event that we create the gssd/clntXX dir, but the pipe creation
|
||||
subsequently fails, then we should remove the clntXX dir before
|
||||
returning.
|
||||
|
||||
Signed-off-by: Jeff Layton <jlayton@redhat.com>
|
||||
---
|
||||
net/sunrpc/rpc_pipe.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/net/sunrpc/rpc_pipe.c b/net/sunrpc/rpc_pipe.c
|
||||
index 5cd7ad1..0b74c61 100644
|
||||
--- a/net/sunrpc/rpc_pipe.c
|
||||
+++ b/net/sunrpc/rpc_pipe.c
|
||||
@@ -1313,6 +1313,8 @@ rpc_gssd_dummy_populate(struct dentry *root, struct rpc_pipe *pipe_data)
|
||||
}
|
||||
|
||||
pipe_dentry = rpc_mkpipe_dentry(clnt_dentry, "gssd", NULL, pipe_data);
|
||||
+ if (IS_ERR(pipe_dentry))
|
||||
+ __rpc_depopulate(gssd_dentry, gssd_dummy_clnt_dir, 0, 1);
|
||||
out:
|
||||
dput(clnt_dentry);
|
||||
dput(gssd_dentry);
|
||||
--
|
||||
1.8.4.2
|
||||
|
||||
--
|
||||
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
|
||||
the body of a message to majordomo@vger.kernel.org
|
||||
More majordomo info at http://vger.kernel.org/majordomo-info.html
|
|
@ -1,7 +1,7 @@
|
|||
Bugzilla: N/A
|
||||
Upstream-status: Fedora mustard. Replaced by securelevels, but that was nak'd
|
||||
|
||||
From 0fc411ee00c81b8a18b1417d31f2736fad155d89 Mon Sep 17 00:00:00 2001
|
||||
From f212a4d8b8638a3e15e4cd76874d4fab60726752 Mon Sep 17 00:00:00 2001
|
||||
From: Matthew Garrett <matthew.garrett@nebula.com>
|
||||
Date: Fri, 9 Aug 2013 17:58:15 -0400
|
||||
Subject: [PATCH 01/14] Add secure_modules() call
|
||||
|
@ -17,10 +17,10 @@ Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com>
|
|||
2 files changed, 17 insertions(+)
|
||||
|
||||
diff --git a/include/linux/module.h b/include/linux/module.h
|
||||
index 05f2447..de97e77 100644
|
||||
index 15cd6b1..30702eb 100644
|
||||
--- a/include/linux/module.h
|
||||
+++ b/include/linux/module.h
|
||||
@@ -515,6 +515,8 @@ int unregister_module_notifier(struct notifier_block * nb);
|
||||
@@ -512,6 +512,8 @@ int unregister_module_notifier(struct notifier_block * nb);
|
||||
|
||||
extern void print_modules(void);
|
||||
|
||||
|
@ -29,7 +29,7 @@ index 05f2447..de97e77 100644
|
|||
#else /* !CONFIG_MODULES... */
|
||||
|
||||
/* Given an address, look for it in the exception tables. */
|
||||
@@ -625,6 +627,11 @@ static inline int unregister_module_notifier(struct notifier_block * nb)
|
||||
@@ -622,6 +624,11 @@ static inline int unregister_module_notifier(struct notifier_block * nb)
|
||||
static inline void print_modules(void)
|
||||
{
|
||||
}
|
||||
|
@ -42,10 +42,10 @@ index 05f2447..de97e77 100644
|
|||
|
||||
#ifdef CONFIG_SYSFS
|
||||
diff --git a/kernel/module.c b/kernel/module.c
|
||||
index dc58274..81206c1 100644
|
||||
index f5a3b1e..644c33e 100644
|
||||
--- a/kernel/module.c
|
||||
+++ b/kernel/module.c
|
||||
@@ -3860,3 +3860,13 @@ void module_layout(struct module *mod,
|
||||
@@ -3831,3 +3831,13 @@ void module_layout(struct module *mod,
|
||||
}
|
||||
EXPORT_SYMBOL(module_layout);
|
||||
#endif
|
||||
|
@ -60,10 +60,10 @@ index dc58274..81206c1 100644
|
|||
+}
|
||||
+EXPORT_SYMBOL(secure_modules);
|
||||
--
|
||||
1.8.3.1
|
||||
1.8.4.2
|
||||
|
||||
|
||||
From b94942e55b519e70366e970cea3665c464d1b7da Mon Sep 17 00:00:00 2001
|
||||
From 394a8259d0b457495dddda8704821ec9e56ea44a Mon Sep 17 00:00:00 2001
|
||||
From: Matthew Garrett <matthew.garrett@nebula.com>
|
||||
Date: Thu, 8 Mar 2012 10:10:38 -0500
|
||||
Subject: [PATCH 02/14] PCI: Lock down BAR access when module security is
|
||||
|
@ -83,7 +83,7 @@ Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com>
|
|||
3 files changed, 19 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c
|
||||
index d8eb880..a851ad6 100644
|
||||
index c91e6c1..447742e 100644
|
||||
--- a/drivers/pci/pci-sysfs.c
|
||||
+++ b/drivers/pci/pci-sysfs.c
|
||||
@@ -29,6 +29,7 @@
|
||||
|
@ -94,7 +94,7 @@ index d8eb880..a851ad6 100644
|
|||
#include "pci.h"
|
||||
|
||||
static int sysfs_initialized; /* = 0 */
|
||||
@@ -644,6 +645,9 @@ pci_write_config(struct file* filp, struct kobject *kobj,
|
||||
@@ -668,6 +669,9 @@ pci_write_config(struct file* filp, struct kobject *kobj,
|
||||
loff_t init_off = off;
|
||||
u8 *data = (u8*) buf;
|
||||
|
||||
|
@ -104,7 +104,7 @@ index d8eb880..a851ad6 100644
|
|||
if (off > dev->cfg_size)
|
||||
return 0;
|
||||
if (off + count > dev->cfg_size) {
|
||||
@@ -950,6 +954,9 @@ pci_mmap_resource(struct kobject *kobj, struct bin_attribute *attr,
|
||||
@@ -974,6 +978,9 @@ pci_mmap_resource(struct kobject *kobj, struct bin_attribute *attr,
|
||||
resource_size_t start, end;
|
||||
int i;
|
||||
|
||||
|
@ -114,7 +114,7 @@ index d8eb880..a851ad6 100644
|
|||
for (i = 0; i < PCI_ROM_RESOURCE; i++)
|
||||
if (res == &pdev->resource[i])
|
||||
break;
|
||||
@@ -1057,6 +1064,9 @@ pci_write_resource_io(struct file *filp, struct kobject *kobj,
|
||||
@@ -1081,6 +1088,9 @@ pci_write_resource_io(struct file *filp, struct kobject *kobj,
|
||||
struct bin_attribute *attr, char *buf,
|
||||
loff_t off, size_t count)
|
||||
{
|
||||
|
@ -125,7 +125,7 @@ index d8eb880..a851ad6 100644
|
|||
}
|
||||
|
||||
diff --git a/drivers/pci/proc.c b/drivers/pci/proc.c
|
||||
index cdc7836..e3d498b 100644
|
||||
index 46d1378..294fe7b 100644
|
||||
--- a/drivers/pci/proc.c
|
||||
+++ b/drivers/pci/proc.c
|
||||
@@ -117,6 +117,9 @@ proc_bus_pci_write(struct file *file, const char __user *buf, size_t nbytes, lof
|
||||
|
@ -158,7 +158,7 @@ index cdc7836..e3d498b 100644
|
|||
|
||||
/* Make sure the caller is mapping a real resource for this device */
|
||||
diff --git a/drivers/pci/syscall.c b/drivers/pci/syscall.c
|
||||
index e1c1ec5..bffbf71 100644
|
||||
index 24750a1..fa57896 100644
|
||||
--- a/drivers/pci/syscall.c
|
||||
+++ b/drivers/pci/syscall.c
|
||||
@@ -10,6 +10,7 @@
|
||||
|
@ -179,10 +179,10 @@ index e1c1ec5..bffbf71 100644
|
|||
|
||||
dev = pci_get_bus_and_slot(bus, dfn);
|
||||
--
|
||||
1.8.3.1
|
||||
1.8.4.2
|
||||
|
||||
|
||||
From 36f34509fe52cc49e1b1f6815a3f235040f64a03 Mon Sep 17 00:00:00 2001
|
||||
From 69532e626cece8a43c2528246e0421488b468102 Mon Sep 17 00:00:00 2001
|
||||
From: Matthew Garrett <matthew.garrett@nebula.com>
|
||||
Date: Thu, 8 Mar 2012 10:35:59 -0500
|
||||
Subject: [PATCH 03/14] x86: Lock down IO port access when module security is
|
||||
|
@ -252,10 +252,10 @@ index f895a8c..1af8664 100644
|
|||
return -EFAULT;
|
||||
while (count-- > 0 && i < 65536) {
|
||||
--
|
||||
1.8.3.1
|
||||
1.8.4.2
|
||||
|
||||
|
||||
From 67d9800dcf60467e076587b0aac67bcdc516cfe2 Mon Sep 17 00:00:00 2001
|
||||
From 8771ff55273e964d707b174dd0dbe433783c0254 Mon Sep 17 00:00:00 2001
|
||||
From: Matthew Garrett <matthew.garrett@nebula.com>
|
||||
Date: Fri, 9 Mar 2012 08:39:37 -0500
|
||||
Subject: [PATCH 04/14] ACPI: Limit access to custom_method
|
||||
|
@ -284,10 +284,10 @@ index 12b62f2..50647b3 100644
|
|||
/* parse the table header to get the table length */
|
||||
if (count <= sizeof(struct acpi_table_header))
|
||||
--
|
||||
1.8.3.1
|
||||
1.8.4.2
|
||||
|
||||
|
||||
From bdf3761573167c20c72b151c1088b24fd24869ac Mon Sep 17 00:00:00 2001
|
||||
From 7d3e3db90e1b4cf33ba4a46624ae4a68f787e5fc Mon Sep 17 00:00:00 2001
|
||||
From: Matthew Garrett <matthew.garrett@nebula.com>
|
||||
Date: Fri, 9 Mar 2012 08:46:50 -0500
|
||||
Subject: [PATCH 05/14] asus-wmi: Restrict debugfs interface when module
|
||||
|
@ -339,10 +339,10 @@ index 19c313b..db18ef66 100644
|
|||
1, asus->debug.method_id,
|
||||
&input, &output);
|
||||
--
|
||||
1.8.3.1
|
||||
1.8.4.2
|
||||
|
||||
|
||||
From 65d88af5a2c6bb6d01da17819d8ba782bd208837 Mon Sep 17 00:00:00 2001
|
||||
From 98ebe083d75333e269730fe374cca42ac7f08a07 Mon Sep 17 00:00:00 2001
|
||||
From: Matthew Garrett <matthew.garrett@nebula.com>
|
||||
Date: Fri, 9 Mar 2012 09:28:15 -0500
|
||||
Subject: [PATCH 06/14] Restrict /dev/mem and /dev/kmem when module loading is
|
||||
|
@ -382,10 +382,10 @@ index 1af8664..61406c8 100644
|
|||
unsigned long to_write = min_t(unsigned long, count,
|
||||
(unsigned long)high_memory - p);
|
||||
--
|
||||
1.8.3.1
|
||||
1.8.4.2
|
||||
|
||||
|
||||
From 4aa42b7fa5d7f79eb1d179e728ffa561fd9cf354 Mon Sep 17 00:00:00 2001
|
||||
From 71353d491c70b303a07b4e79c896e729a4f74978 Mon Sep 17 00:00:00 2001
|
||||
From: Josh Boyer <jwboyer@redhat.com>
|
||||
Date: Mon, 25 Jun 2012 19:57:30 -0400
|
||||
Subject: [PATCH 07/14] acpi: Ignore acpi_rsdp kernel parameter when module
|
||||
|
@ -401,7 +401,7 @@ Signed-off-by: Josh Boyer <jwboyer@redhat.com>
|
|||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c
|
||||
index e5f416c..9311c00 100644
|
||||
index 54a20ff..d21d269 100644
|
||||
--- a/drivers/acpi/osl.c
|
||||
+++ b/drivers/acpi/osl.c
|
||||
@@ -45,6 +45,7 @@
|
||||
|
@ -412,7 +412,7 @@ index e5f416c..9311c00 100644
|
|||
|
||||
#include <asm/io.h>
|
||||
#include <asm/uaccess.h>
|
||||
@@ -249,7 +250,7 @@ early_param("acpi_rsdp", setup_acpi_rsdp);
|
||||
@@ -248,7 +249,7 @@ early_param("acpi_rsdp", setup_acpi_rsdp);
|
||||
acpi_physical_address __init acpi_os_get_root_pointer(void)
|
||||
{
|
||||
#ifdef CONFIG_KEXEC
|
||||
|
@ -422,10 +422,10 @@ index e5f416c..9311c00 100644
|
|||
#endif
|
||||
|
||||
--
|
||||
1.8.3.1
|
||||
1.8.4.2
|
||||
|
||||
|
||||
From c9e62c2ce588d98a774a3853e56d95e48b9df98c Mon Sep 17 00:00:00 2001
|
||||
From e0a6b0dd91460123d71784d531b9df26449940ae Mon Sep 17 00:00:00 2001
|
||||
From: Matthew Garrett <matthew.garrett@nebula.com>
|
||||
Date: Fri, 9 Aug 2013 03:33:56 -0400
|
||||
Subject: [PATCH 08/14] kexec: Disable at runtime if the kernel enforces module
|
||||
|
@ -441,7 +441,7 @@ Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com>
|
|||
1 file changed, 8 insertions(+)
|
||||
|
||||
diff --git a/kernel/kexec.c b/kernel/kexec.c
|
||||
index 2a74f30..13601e3 100644
|
||||
index 9c97016..8ad0d38 100644
|
||||
--- a/kernel/kexec.c
|
||||
+++ b/kernel/kexec.c
|
||||
@@ -32,6 +32,7 @@
|
||||
|
@ -452,7 +452,7 @@ index 2a74f30..13601e3 100644
|
|||
|
||||
#include <asm/page.h>
|
||||
#include <asm/uaccess.h>
|
||||
@@ -943,6 +944,13 @@ SYSCALL_DEFINE4(kexec_load, unsigned long, entry, unsigned long, nr_segments,
|
||||
@@ -946,6 +947,13 @@ SYSCALL_DEFINE4(kexec_load, unsigned long, entry, unsigned long, nr_segments,
|
||||
return -EPERM;
|
||||
|
||||
/*
|
||||
|
@ -467,10 +467,10 @@ index 2a74f30..13601e3 100644
|
|||
* This leaves us room for future extensions.
|
||||
*/
|
||||
--
|
||||
1.8.3.1
|
||||
1.8.4.2
|
||||
|
||||
|
||||
From d0e3cb2c13dc9634849ddacf75b6f0d94147516a Mon Sep 17 00:00:00 2001
|
||||
From c340630e68e5ed4d731d60d05ef9e2ae27080b66 Mon Sep 17 00:00:00 2001
|
||||
From: Matthew Garrett <matthew.garrett@nebula.com>
|
||||
Date: Tue, 3 Sep 2013 11:23:29 -0400
|
||||
Subject: [PATCH 09/14] uswsusp: Disable when module loading is restricted
|
||||
|
@ -485,7 +485,7 @@ Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com>
|
|||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/kernel/power/user.c b/kernel/power/user.c
|
||||
index 957f061..e570609d 100644
|
||||
index 98d3575..efe99de 100644
|
||||
--- a/kernel/power/user.c
|
||||
+++ b/kernel/power/user.c
|
||||
@@ -24,6 +24,7 @@
|
||||
|
@ -507,10 +507,10 @@ index 957f061..e570609d 100644
|
|||
|
||||
if (!atomic_add_unless(&snapshot_device_available, -1, 0)) {
|
||||
--
|
||||
1.8.3.1
|
||||
1.8.4.2
|
||||
|
||||
|
||||
From b238417ed3c5a0b21bbfcac84f6c70011b8977c0 Mon Sep 17 00:00:00 2001
|
||||
From 273deda4ddec360ce67ac256b8cbdabdc5e8c51d Mon Sep 17 00:00:00 2001
|
||||
From: Matthew Garrett <matthew.garrett@nebula.com>
|
||||
Date: Fri, 8 Feb 2013 11:12:13 -0800
|
||||
Subject: [PATCH 10/14] x86: Restrict MSR access when module loading is
|
||||
|
@ -552,10 +552,10 @@ index 05266b5..e2bd647 100644
|
|||
err = -EFAULT;
|
||||
break;
|
||||
--
|
||||
1.8.3.1
|
||||
1.8.4.2
|
||||
|
||||
|
||||
From c3a9afb3b580b4f721d245fc5d13e378b99b9cd8 Mon Sep 17 00:00:00 2001
|
||||
From 089166c0d42f1b82988aad4f23607deb6ee531e7 Mon Sep 17 00:00:00 2001
|
||||
From: Matthew Garrett <matthew.garrett@nebula.com>
|
||||
Date: Fri, 9 Aug 2013 18:36:30 -0400
|
||||
Subject: [PATCH 11/14] Add option to automatically enforce module signatures
|
||||
|
@ -591,10 +591,10 @@ index 199f453..ec38acf 100644
|
|||
290/040 ALL edd_mbr_sig_buffer EDD MBR signatures
|
||||
2D0/A00 ALL e820_map E820 memory map table
|
||||
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
|
||||
index 725e157..fe212ef 100644
|
||||
index 5216e28..2a147a3 100644
|
||||
--- a/arch/x86/Kconfig
|
||||
+++ b/arch/x86/Kconfig
|
||||
@@ -1604,6 +1604,16 @@ config EFI_STUB
|
||||
@@ -1582,6 +1582,16 @@ config EFI_STUB
|
||||
|
||||
See Documentation/efi-stub.txt for more information.
|
||||
|
||||
|
@ -673,10 +673,10 @@ index a7677ba..4e172e9 100644
|
|||
|
||||
setup_efi_pci(boot_params);
|
||||
diff --git a/arch/x86/include/uapi/asm/bootparam.h b/arch/x86/include/uapi/asm/bootparam.h
|
||||
index 9c3733c..a7ba210 100644
|
||||
index 225b098..90dbfb7 100644
|
||||
--- a/arch/x86/include/uapi/asm/bootparam.h
|
||||
+++ b/arch/x86/include/uapi/asm/bootparam.h
|
||||
@@ -131,7 +131,8 @@ struct boot_params {
|
||||
@@ -133,7 +133,8 @@ struct boot_params {
|
||||
__u8 eddbuf_entries; /* 0x1e9 */
|
||||
__u8 edd_mbr_sig_buf_entries; /* 0x1ea */
|
||||
__u8 kbd_status; /* 0x1eb */
|
||||
|
@ -687,10 +687,10 @@ index 9c3733c..a7ba210 100644
|
|||
* The sentinel is set to a nonzero value (0xff) in header.S.
|
||||
*
|
||||
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
|
||||
index 918d489..fe429c1 100644
|
||||
index 182b3f9..ab6cc9e 100644
|
||||
--- a/arch/x86/kernel/setup.c
|
||||
+++ b/arch/x86/kernel/setup.c
|
||||
@@ -1127,6 +1127,12 @@ void __init setup_arch(char **cmdline_p)
|
||||
@@ -1129,6 +1129,12 @@ void __init setup_arch(char **cmdline_p)
|
||||
|
||||
io_delay_init();
|
||||
|
||||
|
@ -704,7 +704,7 @@ index 918d489..fe429c1 100644
|
|||
* Parse the ACPI tables for possible boot-time SMP configuration.
|
||||
*/
|
||||
diff --git a/include/linux/module.h b/include/linux/module.h
|
||||
index de97e77..d69fe19 100644
|
||||
index 30702eb..3eb0f52 100644
|
||||
--- a/include/linux/module.h
|
||||
+++ b/include/linux/module.h
|
||||
@@ -190,6 +190,12 @@ const struct exception_table_entry *search_exception_tables(unsigned long add);
|
||||
|
@ -721,10 +721,10 @@ index de97e77..d69fe19 100644
|
|||
|
||||
extern int modules_disabled; /* for sysctl */
|
||||
diff --git a/kernel/module.c b/kernel/module.c
|
||||
index 81206c1..e1428f0 100644
|
||||
index 644c33e..92b73b1 100644
|
||||
--- a/kernel/module.c
|
||||
+++ b/kernel/module.c
|
||||
@@ -3861,6 +3861,13 @@ void module_layout(struct module *mod,
|
||||
@@ -3832,6 +3832,13 @@ void module_layout(struct module *mod,
|
||||
EXPORT_SYMBOL(module_layout);
|
||||
#endif
|
||||
|
||||
|
@ -739,10 +739,10 @@ index 81206c1..e1428f0 100644
|
|||
{
|
||||
#ifdef CONFIG_MODULE_SIG
|
||||
--
|
||||
1.8.3.1
|
||||
1.8.4.2
|
||||
|
||||
|
||||
From 27a1aa77c7fbaaae8c6a776190a38dcbf3c3d6d2 Mon Sep 17 00:00:00 2001
|
||||
From e9ad6bd405fa01b7dd52d8c75b9dc91ae52e131d Mon Sep 17 00:00:00 2001
|
||||
From: Josh Boyer <jwboyer@redhat.com>
|
||||
Date: Tue, 5 Feb 2013 19:25:05 -0500
|
||||
Subject: [PATCH 12/14] efi: Disable secure boot if shim is in insecure mode
|
||||
|
@ -798,10 +798,10 @@ index 4e172e9..4905f4d 100644
|
|||
}
|
||||
|
||||
--
|
||||
1.8.3.1
|
||||
1.8.4.2
|
||||
|
||||
|
||||
From 2a445ca2c187da4497ef5f68f111574fd2b0d419 Mon Sep 17 00:00:00 2001
|
||||
From f9f355d5e58c1503bb7c03d92c9e89267e0f46ad Mon Sep 17 00:00:00 2001
|
||||
From: Josh Boyer <jwboyer@fedoraproject.org>
|
||||
Date: Tue, 27 Aug 2013 13:28:43 -0400
|
||||
Subject: [PATCH 13/14] efi: Make EFI_SECURE_BOOT_SIG_ENFORCE depend on EFI
|
||||
|
@ -815,10 +815,10 @@ Signed-off-by: Josh Boyer <jwboyer@fedoraproject.org>
|
|||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
|
||||
index fe212ef..bf83fd3 100644
|
||||
index 2a147a3..9e644d5 100644
|
||||
--- a/arch/x86/Kconfig
|
||||
+++ b/arch/x86/Kconfig
|
||||
@@ -1605,7 +1605,8 @@ config EFI_STUB
|
||||
@@ -1583,7 +1583,8 @@ config EFI_STUB
|
||||
See Documentation/efi-stub.txt for more information.
|
||||
|
||||
config EFI_SECURE_BOOT_SIG_ENFORCE
|
||||
|
@ -829,10 +829,10 @@ index fe212ef..bf83fd3 100644
|
|||
---help---
|
||||
UEFI Secure Boot provides a mechanism for ensuring that the
|
||||
--
|
||||
1.8.3.1
|
||||
1.8.4.2
|
||||
|
||||
|
||||
From b1c533cc1d1ca7a03497cc4f2e1b029bde95633c Mon Sep 17 00:00:00 2001
|
||||
From a30576a9db583213474b74360c5869e8882e6ed7 Mon Sep 17 00:00:00 2001
|
||||
From: Josh Boyer <jwboyer@fedoraproject.org>
|
||||
Date: Tue, 27 Aug 2013 13:33:03 -0400
|
||||
Subject: [PATCH 14/14] efi: Add EFI_SECURE_BOOT bit
|
||||
|
@ -847,10 +847,10 @@ Signed-off-by: Josh Boyer <jwboyer@fedoraproject.org>
|
|||
2 files changed, 3 insertions(+)
|
||||
|
||||
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
|
||||
index fe429c1..469fbf0 100644
|
||||
index ab6cc9e..99933cd 100644
|
||||
--- a/arch/x86/kernel/setup.c
|
||||
+++ b/arch/x86/kernel/setup.c
|
||||
@@ -1129,7 +1129,9 @@ void __init setup_arch(char **cmdline_p)
|
||||
@@ -1131,7 +1131,9 @@ void __init setup_arch(char **cmdline_p)
|
||||
|
||||
#ifdef CONFIG_EFI_SECURE_BOOT_SIG_ENFORCE
|
||||
if (boot_params.secure_boot) {
|
||||
|
@ -861,17 +861,17 @@ index fe429c1..469fbf0 100644
|
|||
#endif
|
||||
|
||||
diff --git a/include/linux/efi.h b/include/linux/efi.h
|
||||
index bc5687d..b010a2e 100644
|
||||
index 0a819e7..0c1d367 100644
|
||||
--- a/include/linux/efi.h
|
||||
+++ b/include/linux/efi.h
|
||||
@@ -653,6 +653,7 @@ extern int __init efi_setup_pcdp_console(char *);
|
||||
#define EFI_RUNTIME_SERVICES 3 /* Can we use runtime services? */
|
||||
@@ -657,6 +657,7 @@ extern int __init efi_setup_pcdp_console(char *);
|
||||
#define EFI_MEMMAP 4 /* Can we use EFI memory map? */
|
||||
#define EFI_64BIT 5 /* Is the firmware 64-bit? */
|
||||
+#define EFI_SECURE_BOOT 6 /* Are we in Secure Boot mode? */
|
||||
#define EFI_ARCH_1 6 /* First arch-specific bit */
|
||||
+#define EFI_SECURE_BOOT 7 /* Are we in Secure Boot mode? */
|
||||
|
||||
#ifdef CONFIG_EFI
|
||||
# ifdef CONFIG_X86
|
||||
--
|
||||
1.8.3.1
|
||||
1.8.4.2
|
||||
|
||||
|
|
|
@ -1,94 +0,0 @@
|
|||
Bugzilla: 1013466
|
||||
Upstream-status: queued for 3.14/3.15? http://marc.info/?l=selinux&m=139351174702148&w=2
|
||||
|
||||
It turns out that doing the SELinux MAC checks for mmap() before the
|
||||
DAC checks was causing users and the SELinux policy folks headaches
|
||||
as users were seeing a lot of SELinux AVC denials for the
|
||||
memprotect:mmap_zero permission that would have also been denied by
|
||||
the normal DAC capability checks (CAP_SYS_RAWIO).
|
||||
|
||||
Example:
|
||||
|
||||
# cat mmap_test.c
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <errno.h>
|
||||
#include <sys/mman.h>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
int rc;
|
||||
void *mem;
|
||||
|
||||
mem = mmap(0x0, 4096,
|
||||
PROT_READ | PROT_WRITE,
|
||||
MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, -1, 0);
|
||||
if (mem == MAP_FAILED)
|
||||
return errno;
|
||||
printf("mem = %p\n", mem);
|
||||
munmap(mem, 4096);
|
||||
|
||||
return 0;
|
||||
}
|
||||
# gcc -g -O0 -o mmap_test mmap_test.c
|
||||
# ./mmap_test
|
||||
mem = (nil)
|
||||
# ausearch -m AVC | grep mmap_zero
|
||||
type=AVC msg=audit(...): avc: denied { mmap_zero }
|
||||
for pid=1025 comm="mmap_test"
|
||||
scontext=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
|
||||
tcontext=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
|
||||
tclass=memprotect
|
||||
|
||||
This patch corrects things so that when the above example is run by a
|
||||
user without CAP_SYS_RAWIO the SELinux AVC is no longer generated as
|
||||
the DAC capability check fails before the SELinux permission check.
|
||||
|
||||
Signed-off-by: Paul Moore <pmoore@redhat.com>
|
||||
---
|
||||
security/selinux/hooks.c | 20 ++++++++------------
|
||||
1 file changed, 8 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c
|
||||
index 57b0b49..e3664ae 100644
|
||||
--- a/security/selinux/hooks.c
|
||||
+++ b/security/selinux/hooks.c
|
||||
@@ -3205,24 +3205,20 @@ error:
|
||||
|
||||
static int selinux_mmap_addr(unsigned long addr)
|
||||
{
|
||||
- int rc = 0;
|
||||
- u32 sid = current_sid();
|
||||
+ int rc;
|
||||
+
|
||||
+ /* do DAC check on address space usage */
|
||||
+ rc = cap_mmap_addr(addr);
|
||||
+ if (rc)
|
||||
+ return rc;
|
||||
|
||||
- /*
|
||||
- * notice that we are intentionally putting the SELinux check before
|
||||
- * the secondary cap_file_mmap check. This is such a likely attempt
|
||||
- * at bad behaviour/exploit that we always want to get the AVC, even
|
||||
- * if DAC would have also denied the operation.
|
||||
- */
|
||||
if (addr < CONFIG_LSM_MMAP_MIN_ADDR) {
|
||||
+ u32 sid = current_sid();
|
||||
rc = avc_has_perm(sid, sid, SECCLASS_MEMPROTECT,
|
||||
MEMPROTECT__MMAP_ZERO, NULL);
|
||||
- if (rc)
|
||||
- return rc;
|
||||
}
|
||||
|
||||
- /* do DAC check on address space usage */
|
||||
- return cap_mmap_addr(addr);
|
||||
+ return rc;
|
||||
}
|
||||
|
||||
static int selinux_mmap_file(struct file *file, unsigned long reqprot,
|
||||
|
||||
_______________________________________________
|
||||
Selinux mailing list
|
||||
Selinux@tycho.nsa.gov
|
||||
To unsubscribe, send email to Selinux-leave@tycho.nsa.gov.
|
||||
To get help, send an email containing "help" to Selinux-request@tycho.nsa.gov.
|
4
sources
4
sources
|
@ -1,2 +1,2 @@
|
|||
0ecbaf65c00374eb4a826c2f9f37606f linux-3.13.tar.xz
|
||||
dcf42b5013a7831d02168fd3eda5cce2 patch-3.13.10.xz
|
||||
b621207b3f6ecbb67db18b13258f8ea8 linux-3.14.tar.xz
|
||||
2526eb95793ecc1c22d7e1428ef23cdc patch-3.14.1.xz
|
||||
|
|
|
@ -1,96 +0,0 @@
|
|||
Bugzilla: 1037793
|
||||
Upstream-status: submitted for 3.14
|
||||
|
||||
rpc.gssd expects to see an "info" file in each clntXX dir. Since adding
|
||||
the dummy gssd pipe, users that run rpc.gssd see a lot of these messages
|
||||
spamming the logs:
|
||||
|
||||
rpc.gssd[508]: ERROR: can't open /var/lib/nfs/rpc_pipefs/gssd/clntXX/info: No such file or directory
|
||||
rpc.gssd[508]: ERROR: failed to read service info
|
||||
|
||||
Add a dummy gssd/clntXX/info file to help silence these messages.
|
||||
|
||||
Signed-off-by: Jeff Layton <jlayton@redhat.com>
|
||||
---
|
||||
net/sunrpc/rpc_pipe.c | 50 +++++++++++++++++++++++++++++++++++++++++++++++++-
|
||||
1 file changed, 49 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/net/sunrpc/rpc_pipe.c b/net/sunrpc/rpc_pipe.c
|
||||
index 0b74c61..5d973b2 100644
|
||||
--- a/net/sunrpc/rpc_pipe.c
|
||||
+++ b/net/sunrpc/rpc_pipe.c
|
||||
@@ -17,6 +17,7 @@
|
||||
#include <linux/fsnotify.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/rcupdate.h>
|
||||
+#include <linux/utsname.h>
|
||||
|
||||
#include <asm/ioctls.h>
|
||||
#include <linux/poll.h>
|
||||
@@ -1275,6 +1276,44 @@ static const struct rpc_pipe_ops gssd_dummy_pipe_ops = {
|
||||
.downcall = dummy_downcall,
|
||||
};
|
||||
|
||||
+/*
|
||||
+ * Here we present a bogus "info" file to keep rpc.gssd happy. We don't expect
|
||||
+ * that it will ever use this info to handle an upcall, but rpc.gssd expects
|
||||
+ * that this file will be there and have a certain format.
|
||||
+ */
|
||||
+static int
|
||||
+rpc_show_dummy_info(struct seq_file *m, void *v)
|
||||
+{
|
||||
+ seq_printf(m, "RPC server: %s\n", utsname()->nodename);
|
||||
+ seq_printf(m, "service: foo (1) version 0\n");
|
||||
+ seq_printf(m, "address: 127.0.0.1\n");
|
||||
+ seq_printf(m, "protocol: tcp\n");
|
||||
+ seq_printf(m, "port: 0\n");
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int
|
||||
+rpc_dummy_info_open(struct inode *inode, struct file *file)
|
||||
+{
|
||||
+ return single_open(file, rpc_show_dummy_info, NULL);
|
||||
+}
|
||||
+
|
||||
+static const struct file_operations rpc_dummy_info_operations = {
|
||||
+ .owner = THIS_MODULE,
|
||||
+ .open = rpc_dummy_info_open,
|
||||
+ .read = seq_read,
|
||||
+ .llseek = seq_lseek,
|
||||
+ .release = single_release,
|
||||
+};
|
||||
+
|
||||
+static const struct rpc_filelist gssd_dummy_info_file[] = {
|
||||
+ [0] = {
|
||||
+ .name = "info",
|
||||
+ .i_fop = &rpc_dummy_info_operations,
|
||||
+ .mode = S_IFREG | S_IRUSR,
|
||||
+ },
|
||||
+};
|
||||
+
|
||||
/**
|
||||
* rpc_gssd_dummy_populate - create a dummy gssd pipe
|
||||
* @root: root of the rpc_pipefs filesystem
|
||||
@@ -1312,9 +1351,18 @@ rpc_gssd_dummy_populate(struct dentry *root, struct rpc_pipe *pipe_data)
|
||||
goto out;
|
||||
}
|
||||
|
||||
+ ret = rpc_populate(clnt_dentry, gssd_dummy_info_file, 0, 1, NULL);
|
||||
+ if (ret) {
|
||||
+ __rpc_depopulate(gssd_dentry, gssd_dummy_clnt_dir, 0, 1);
|
||||
+ pipe_dentry = ERR_PTR(ret);
|
||||
+ goto out;
|
||||
+ }
|
||||
+
|
||||
pipe_dentry = rpc_mkpipe_dentry(clnt_dentry, "gssd", NULL, pipe_data);
|
||||
- if (IS_ERR(pipe_dentry))
|
||||
+ if (IS_ERR(pipe_dentry)) {
|
||||
+ __rpc_depopulate(clnt_dentry, gssd_dummy_info_file, 0, 1);
|
||||
__rpc_depopulate(gssd_dentry, gssd_dummy_clnt_dir, 0, 1);
|
||||
+ }
|
||||
out:
|
||||
dput(clnt_dentry);
|
||||
dput(gssd_dentry);
|
||||
--
|
||||
1.8.4.2
|
|
@ -1,233 +0,0 @@
|
|||
Bugzilla: N/A
|
||||
Upstream-status: queued in NFS git tree (for 3.13/3.14?)
|
||||
|
||||
rpc.gssd will naturally hold open any pipe named */clnt*/gssd that shows
|
||||
up under rpc_pipefs. That behavior gives us a reliable mechanism to tell
|
||||
whether it's actually running or not.
|
||||
|
||||
Create a new toplevel "gssd" directory in rpc_pipefs when it's mounted.
|
||||
Under that directory create another directory called "clntXX", and then
|
||||
within that a pipe called "gssd".
|
||||
|
||||
We'll never send an upcall along that pipe, and any downcall written to
|
||||
it will just return -EINVAL.
|
||||
|
||||
Signed-off-by: Jeff Layton <jlayton@redhat.com>
|
||||
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
|
||||
---
|
||||
include/linux/sunrpc/rpc_pipe_fs.h | 3 +-
|
||||
net/sunrpc/netns.h | 1 +
|
||||
net/sunrpc/rpc_pipe.c | 93 ++++++++++++++++++++++++++++++++++-
|
||||
net/sunrpc/sunrpc_syms.c | 8 +++-
|
||||
4 files changed, 100 insertions(+), 5 deletions(-)
|
||||
|
||||
diff -up linux-3.11.9-200.fc19.x86_64/include/linux/sunrpc/rpc_pipe_fs.h.orig linux-3.11.9-200.fc19.x86_64/include/linux/sunrpc/rpc_pipe_fs.h
|
||||
--- linux-3.11.9-200.fc19.x86_64/include/linux/sunrpc/rpc_pipe_fs.h.orig 2013-09-02 16:46:10.000000000 -0400
|
||||
+++ linux-3.11.9-200.fc19.x86_64/include/linux/sunrpc/rpc_pipe_fs.h 2013-11-21 10:11:17.893026000 -0500
|
||||
@@ -64,7 +64,8 @@ enum {
|
||||
|
||||
extern struct dentry *rpc_d_lookup_sb(const struct super_block *sb,
|
||||
const unsigned char *dir_name);
|
||||
-extern void rpc_pipefs_init_net(struct net *net);
|
||||
+extern int rpc_pipefs_init_net(struct net *net);
|
||||
+extern void rpc_pipefs_exit_net(struct net *net);
|
||||
extern struct super_block *rpc_get_sb_net(const struct net *net);
|
||||
extern void rpc_put_sb_net(const struct net *net);
|
||||
|
||||
diff -up linux-3.11.9-200.fc19.x86_64/net/sunrpc/netns.h.orig linux-3.11.9-200.fc19.x86_64/net/sunrpc/netns.h
|
||||
--- linux-3.11.9-200.fc19.x86_64/net/sunrpc/netns.h.orig 2013-09-02 16:46:10.000000000 -0400
|
||||
+++ linux-3.11.9-200.fc19.x86_64/net/sunrpc/netns.h 2013-11-21 10:11:17.897029000 -0500
|
||||
@@ -14,6 +14,7 @@ struct sunrpc_net {
|
||||
struct cache_detail *rsi_cache;
|
||||
|
||||
struct super_block *pipefs_sb;
|
||||
+ struct rpc_pipe *gssd_dummy;
|
||||
struct mutex pipefs_sb_lock;
|
||||
|
||||
struct list_head all_clients;
|
||||
diff -up linux-3.11.9-200.fc19.x86_64/net/sunrpc/rpc_pipe.c.orig linux-3.11.9-200.fc19.x86_64/net/sunrpc/rpc_pipe.c
|
||||
--- linux-3.11.9-200.fc19.x86_64/net/sunrpc/rpc_pipe.c.orig 2013-09-02 16:46:10.000000000 -0400
|
||||
+++ linux-3.11.9-200.fc19.x86_64/net/sunrpc/rpc_pipe.c 2013-11-21 10:11:17.903026000 -0500
|
||||
@@ -38,7 +38,7 @@
|
||||
#define NET_NAME(net) ((net == &init_net) ? " (init_net)" : "")
|
||||
|
||||
static struct file_system_type rpc_pipe_fs_type;
|
||||
-
|
||||
+static const struct rpc_pipe_ops gssd_dummy_pipe_ops;
|
||||
|
||||
static struct kmem_cache *rpc_inode_cachep __read_mostly;
|
||||
|
||||
@@ -1019,6 +1019,7 @@ enum {
|
||||
RPCAUTH_nfsd4_cb,
|
||||
RPCAUTH_cache,
|
||||
RPCAUTH_nfsd,
|
||||
+ RPCAUTH_gssd,
|
||||
RPCAUTH_RootEOF
|
||||
};
|
||||
|
||||
@@ -1055,6 +1056,10 @@ static const struct rpc_filelist files[]
|
||||
.name = "nfsd",
|
||||
.mode = S_IFDIR | S_IRUGO | S_IXUGO,
|
||||
},
|
||||
+ [RPCAUTH_gssd] = {
|
||||
+ .name = "gssd",
|
||||
+ .mode = S_IFDIR | S_IRUGO | S_IXUGO,
|
||||
+ },
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -1068,13 +1073,25 @@ struct dentry *rpc_d_lookup_sb(const str
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(rpc_d_lookup_sb);
|
||||
|
||||
-void rpc_pipefs_init_net(struct net *net)
|
||||
+int rpc_pipefs_init_net(struct net *net)
|
||||
{
|
||||
struct sunrpc_net *sn = net_generic(net, sunrpc_net_id);
|
||||
|
||||
+ sn->gssd_dummy = rpc_mkpipe_data(&gssd_dummy_pipe_ops, 0);
|
||||
+ if (IS_ERR(sn->gssd_dummy))
|
||||
+ return PTR_ERR(sn->gssd_dummy);
|
||||
+
|
||||
mutex_init(&sn->pipefs_sb_lock);
|
||||
sn->gssd_running = 1;
|
||||
sn->pipe_version = -1;
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+void rpc_pipefs_exit_net(struct net *net)
|
||||
+{
|
||||
+ struct sunrpc_net *sn = net_generic(net, sunrpc_net_id);
|
||||
+
|
||||
+ rpc_destroy_pipe_data(sn->gssd_dummy);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1104,11 +1121,73 @@ void rpc_put_sb_net(const struct net *ne
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(rpc_put_sb_net);
|
||||
|
||||
+static const struct rpc_filelist gssd_dummy_clnt_dir[] = {
|
||||
+ [0] = {
|
||||
+ .name = "clntXX",
|
||||
+ .mode = S_IFDIR | S_IRUGO | S_IXUGO,
|
||||
+ },
|
||||
+};
|
||||
+
|
||||
+static ssize_t
|
||||
+dummy_downcall(struct file *filp, const char __user *src, size_t len)
|
||||
+{
|
||||
+ return -EINVAL;
|
||||
+}
|
||||
+
|
||||
+static const struct rpc_pipe_ops gssd_dummy_pipe_ops = {
|
||||
+ .upcall = rpc_pipe_generic_upcall,
|
||||
+ .downcall = dummy_downcall,
|
||||
+};
|
||||
+
|
||||
+/**
|
||||
+ * rpc_gssd_dummy_populate - create a dummy gssd pipe
|
||||
+ * @root: root of the rpc_pipefs filesystem
|
||||
+ * @pipe_data: pipe data created when netns is initialized
|
||||
+ *
|
||||
+ * Create a dummy set of directories and a pipe that gssd can hold open to
|
||||
+ * indicate that it is up and running.
|
||||
+ */
|
||||
+static struct dentry *
|
||||
+rpc_gssd_dummy_populate(struct dentry *root, struct rpc_pipe *pipe_data)
|
||||
+{
|
||||
+ int ret = 0;
|
||||
+ struct dentry *gssd_dentry;
|
||||
+ struct dentry *clnt_dentry = NULL;
|
||||
+ struct dentry *pipe_dentry = NULL;
|
||||
+ struct qstr q = QSTR_INIT(files[RPCAUTH_gssd].name,
|
||||
+ strlen(files[RPCAUTH_gssd].name));
|
||||
+
|
||||
+ /* We should never get this far if "gssd" doesn't exist */
|
||||
+ gssd_dentry = d_hash_and_lookup(root, &q);
|
||||
+ if (!gssd_dentry)
|
||||
+ return ERR_PTR(-ENOENT);
|
||||
+
|
||||
+ ret = rpc_populate(gssd_dentry, gssd_dummy_clnt_dir, 0, 1, NULL);
|
||||
+ if (ret) {
|
||||
+ pipe_dentry = ERR_PTR(ret);
|
||||
+ goto out;
|
||||
+ }
|
||||
+
|
||||
+ q.name = gssd_dummy_clnt_dir[0].name;
|
||||
+ q.len = strlen(gssd_dummy_clnt_dir[0].name);
|
||||
+ clnt_dentry = d_hash_and_lookup(gssd_dentry, &q);
|
||||
+ if (!clnt_dentry) {
|
||||
+ pipe_dentry = ERR_PTR(-ENOENT);
|
||||
+ goto out;
|
||||
+ }
|
||||
+
|
||||
+ pipe_dentry = rpc_mkpipe_dentry(clnt_dentry, "gssd", NULL, pipe_data);
|
||||
+out:
|
||||
+ dput(clnt_dentry);
|
||||
+ dput(gssd_dentry);
|
||||
+ return pipe_dentry;
|
||||
+}
|
||||
+
|
||||
static int
|
||||
rpc_fill_super(struct super_block *sb, void *data, int silent)
|
||||
{
|
||||
struct inode *inode;
|
||||
- struct dentry *root;
|
||||
+ struct dentry *root, *gssd_dentry;
|
||||
struct net *net = data;
|
||||
struct sunrpc_net *sn = net_generic(net, sunrpc_net_id);
|
||||
int err;
|
||||
@@ -1126,6 +1205,13 @@ rpc_fill_super(struct super_block *sb, v
|
||||
return -ENOMEM;
|
||||
if (rpc_populate(root, files, RPCAUTH_lockd, RPCAUTH_RootEOF, NULL))
|
||||
return -ENOMEM;
|
||||
+
|
||||
+ gssd_dentry = rpc_gssd_dummy_populate(root, sn->gssd_dummy);
|
||||
+ if (IS_ERR(gssd_dentry)) {
|
||||
+ __rpc_depopulate(root, files, RPCAUTH_lockd, RPCAUTH_RootEOF);
|
||||
+ return PTR_ERR(gssd_dentry);
|
||||
+ }
|
||||
+
|
||||
dprintk("RPC: sending pipefs MOUNT notification for net %p%s\n",
|
||||
net, NET_NAME(net));
|
||||
mutex_lock(&sn->pipefs_sb_lock);
|
||||
@@ -1140,6 +1226,7 @@ rpc_fill_super(struct super_block *sb, v
|
||||
return 0;
|
||||
|
||||
err_depopulate:
|
||||
+ dput(gssd_dentry);
|
||||
blocking_notifier_call_chain(&rpc_pipefs_notifier_list,
|
||||
RPC_PIPEFS_UMOUNT,
|
||||
sb);
|
||||
diff -up linux-3.11.9-200.fc19.x86_64/net/sunrpc/sunrpc_syms.c.orig linux-3.11.9-200.fc19.x86_64/net/sunrpc/sunrpc_syms.c
|
||||
--- linux-3.11.9-200.fc19.x86_64/net/sunrpc/sunrpc_syms.c.orig 2013-09-02 16:46:10.000000000 -0400
|
||||
+++ linux-3.11.9-200.fc19.x86_64/net/sunrpc/sunrpc_syms.c 2013-11-21 10:11:17.908026000 -0500
|
||||
@@ -44,12 +44,17 @@ static __net_init int sunrpc_init_net(st
|
||||
if (err)
|
||||
goto err_unixgid;
|
||||
|
||||
- rpc_pipefs_init_net(net);
|
||||
+ err = rpc_pipefs_init_net(net);
|
||||
+ if (err)
|
||||
+ goto err_pipefs;
|
||||
+
|
||||
INIT_LIST_HEAD(&sn->all_clients);
|
||||
spin_lock_init(&sn->rpc_client_lock);
|
||||
spin_lock_init(&sn->rpcb_clnt_lock);
|
||||
return 0;
|
||||
|
||||
+err_pipefs:
|
||||
+ unix_gid_cache_destroy(net);
|
||||
err_unixgid:
|
||||
ip_map_cache_destroy(net);
|
||||
err_ipmap:
|
||||
@@ -60,6 +65,7 @@ err_proc:
|
||||
|
||||
static __net_exit void sunrpc_exit_net(struct net *net)
|
||||
{
|
||||
+ rpc_pipefs_exit_net(net);
|
||||
unix_gid_cache_destroy(net);
|
||||
ip_map_cache_destroy(net);
|
||||
rpc_proc_exit(net);
|
||||
|
|
@ -1,139 +0,0 @@
|
|||
Bugzilla: N/A
|
||||
Upstream-status: queued in NFS git tree (for 3.13/3.14?)
|
||||
|
||||
Now that we have a more reliable method to tell if gssd is running, we
|
||||
can replace the sn->gssd_running flag with a function that will query to
|
||||
see if it's up and running.
|
||||
|
||||
There's also no need to attempt an upcall that we know will fail, so
|
||||
just return -EACCES if gssd isn't running. Finally, fix the warn_gss()
|
||||
message not to claim that that the upcall timed out since we don't
|
||||
necesarily perform one now when gssd isn't running, and remove the
|
||||
extraneous newline from the message.
|
||||
|
||||
Signed-off-by: Jeff Layton <jlayton@redhat.com>
|
||||
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
|
||||
---
|
||||
Fixed up to apply to 3.12.1 by Josh Boyer <jwboyer@fedoraproject.org>
|
||||
|
||||
include/linux/sunrpc/rpc_pipe_fs.h | 2 ++
|
||||
net/sunrpc/auth_gss/auth_gss.c | 17 +++++++----------
|
||||
net/sunrpc/netns.h | 2 --
|
||||
net/sunrpc/rpc_pipe.c | 14 ++++++++++----
|
||||
4 files changed, 19 insertions(+), 16 deletions(-)
|
||||
|
||||
diff --git a/include/linux/sunrpc/rpc_pipe_fs.h b/include/linux/sunrpc/rpc_pipe_fs.h
|
||||
index 85f1342..7f490be 100644
|
||||
--- a/include/linux/sunrpc/rpc_pipe_fs.h
|
||||
+++ b/include/linux/sunrpc/rpc_pipe_fs.h
|
||||
@@ -131,5 +131,7 @@ extern int rpc_unlink(struct dentry *);
|
||||
extern int register_rpc_pipefs(void);
|
||||
extern void unregister_rpc_pipefs(void);
|
||||
|
||||
+extern bool gssd_running(struct net *net);
|
||||
+
|
||||
#endif
|
||||
#endif
|
||||
diff --git a/net/sunrpc/auth_gss/auth_gss.c b/net/sunrpc/auth_gss/auth_gss.c
|
||||
index 0846566..1ada878 100644
|
||||
--- a/net/sunrpc/auth_gss/auth_gss.c
|
||||
+++ b/net/sunrpc/auth_gss/auth_gss.c
|
||||
@@ -517,8 +517,7 @@ static void warn_gssd(void)
|
||||
unsigned long now = jiffies;
|
||||
|
||||
if (time_after(now, ratelimit)) {
|
||||
- printk(KERN_WARNING "RPC: AUTH_GSS upcall timed out.\n"
|
||||
- "Please check user daemon is running.\n");
|
||||
+ pr_warn("RPC: AUTH_GSS upcall failed. Please check user daemon is running.\n");
|
||||
ratelimit = now + 15*HZ;
|
||||
}
|
||||
}
|
||||
@@ -581,7 +580,6 @@ gss_create_upcall(struct gss_auth *gss_auth, struct gss_cred *gss_cred)
|
||||
struct rpc_pipe *pipe;
|
||||
struct rpc_cred *cred = &gss_cred->gc_base;
|
||||
struct gss_upcall_msg *gss_msg;
|
||||
- unsigned long timeout;
|
||||
DEFINE_WAIT(wait);
|
||||
int err;
|
||||
|
||||
@@ -589,17 +587,16 @@ gss_create_upcall(struct gss_auth *gss_auth, struct gss_cred *gss_cred)
|
||||
__func__, from_kuid(&init_user_ns, cred->cr_uid));
|
||||
retry:
|
||||
err = 0;
|
||||
- /* Default timeout is 15s unless we know that gssd is not running */
|
||||
- timeout = 15 * HZ;
|
||||
- if (!sn->gssd_running)
|
||||
- timeout = HZ >> 2;
|
||||
+ /* if gssd is down, just skip upcalling altogether */
|
||||
+ if (!gssd_running(net)) {
|
||||
+ warn_gssd();
|
||||
+ return -EACCES;
|
||||
+ }
|
||||
gss_msg = gss_setup_upcall(gss_auth, cred);
|
||||
if (PTR_ERR(gss_msg) == -EAGAIN) {
|
||||
err = wait_event_interruptible_timeout(pipe_version_waitqueue,
|
||||
- sn->pipe_version >= 0, timeout);
|
||||
+ sn->pipe_version >= 0, 15 * HZ);
|
||||
if (sn->pipe_version < 0) {
|
||||
- if (err == 0)
|
||||
- sn->gssd_running = 0;
|
||||
warn_gssd();
|
||||
err = -EACCES;
|
||||
}
|
||||
diff --git a/net/sunrpc/netns.h b/net/sunrpc/netns.h
|
||||
index 8a8e841..94e506f 100644
|
||||
--- a/net/sunrpc/netns.h
|
||||
+++ b/net/sunrpc/netns.h
|
||||
@@ -33,8 +33,6 @@ struct sunrpc_net {
|
||||
int pipe_version;
|
||||
atomic_t pipe_users;
|
||||
struct proc_dir_entry *use_gssp_proc;
|
||||
-
|
||||
- unsigned int gssd_running;
|
||||
};
|
||||
|
||||
extern int sunrpc_net_id;
|
||||
diff --git a/net/sunrpc/rpc_pipe.c b/net/sunrpc/rpc_pipe.c
|
||||
index 40aef18..ad444f3 100644
|
||||
--- a/net/sunrpc/rpc_pipe.c
|
||||
+++ b/net/sunrpc/rpc_pipe.c
|
||||
@@ -216,14 +216,11 @@ rpc_destroy_inode(struct inode *inode)
|
||||
static int
|
||||
rpc_pipe_open(struct inode *inode, struct file *filp)
|
||||
{
|
||||
- struct net *net = inode->i_sb->s_fs_info;
|
||||
- struct sunrpc_net *sn = net_generic(net, sunrpc_net_id);
|
||||
struct rpc_pipe *pipe;
|
||||
int first_open;
|
||||
int res = -ENXIO;
|
||||
|
||||
mutex_lock(&inode->i_mutex);
|
||||
- sn->gssd_running = 1;
|
||||
pipe = RPC_I(inode)->pipe;
|
||||
if (pipe == NULL)
|
||||
goto out;
|
||||
@@ -1231,7 +1228,6 @@ int rpc_pipefs_init_net(struct net *net)
|
||||
return PTR_ERR(sn->gssd_dummy);
|
||||
|
||||
mutex_init(&sn->pipefs_sb_lock);
|
||||
- sn->gssd_running = 1;
|
||||
sn->pipe_version = -1;
|
||||
return 0;
|
||||
}
|
||||
@@ -1385,6 +1381,16 @@ err_depopulate:
|
||||
return err;
|
||||
}
|
||||
|
||||
+bool
|
||||
+gssd_running(struct net *net)
|
||||
+{
|
||||
+ struct sunrpc_net *sn = net_generic(net, sunrpc_net_id);
|
||||
+ struct rpc_pipe *pipe = sn->gssd_dummy;
|
||||
+
|
||||
+ return pipe->nreaders || pipe->nwriters;
|
||||
+}
|
||||
+EXPORT_SYMBOL_GPL(gssd_running);
|
||||
+
|
||||
static struct dentry *
|
||||
rpc_mount(struct file_system_type *fs_type,
|
||||
int flags, const char *dev_name, void *data)
|
|
@ -1,20 +1,23 @@
|
|||
From 71aac34ed679daa0bf772051eb40412b5bd95da3 Mon Sep 17 00:00:00 2001
|
||||
Bugzilla: N/A
|
||||
Upstream-status: Fedora mustard
|
||||
|
||||
From 29c1f71a2d0845a71ea2ebd2fb33542373dc52dd Mon Sep 17 00:00:00 2001
|
||||
From: Kyle McMartin <kyle@redhat.com>
|
||||
Date: Fri, 30 Aug 2013 09:28:51 -0400
|
||||
Subject: [PATCH] Add sysrq option to disable secure boot mode
|
||||
|
||||
---
|
||||
arch/x86/kernel/setup.c | 35 +++++++++++++++++++++++++++++++++++
|
||||
arch/x86/kernel/setup.c | 36 ++++++++++++++++++++++++++++++++++++
|
||||
drivers/input/misc/uinput.c | 1 +
|
||||
drivers/tty/sysrq.c | 19 +++++++++++++------
|
||||
include/linux/input.h | 5 +++++
|
||||
include/linux/sysrq.h | 8 +++++++-
|
||||
kernel/debug/kdb/kdb_main.c | 2 +-
|
||||
kernel/module.c | 4 ++--
|
||||
7 files changed, 64 insertions(+), 10 deletions(-)
|
||||
7 files changed, 65 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
|
||||
index 08dc16e..6971f8e 100644
|
||||
index c773add..92c480c 100644
|
||||
--- a/arch/x86/kernel/setup.c
|
||||
+++ b/arch/x86/kernel/setup.c
|
||||
@@ -70,6 +70,11 @@
|
||||
|
@ -29,11 +32,10 @@ index 08dc16e..6971f8e 100644
|
|||
#include <video/edid.h>
|
||||
|
||||
#include <asm/mtrr.h>
|
||||
@@ -1253,3 +1258,33 @@ void __init i386_reserve_resources(void)
|
||||
}
|
||||
@@ -1275,6 +1280,37 @@ void __init i386_reserve_resources(void)
|
||||
|
||||
#endif /* CONFIG_X86_32 */
|
||||
+
|
||||
|
||||
+#ifdef CONFIG_MAGIC_SYSRQ
|
||||
+#ifdef CONFIG_MODULE_SIG
|
||||
+extern bool sig_enforce;
|
||||
|
@ -63,8 +65,13 @@ index 08dc16e..6971f8e 100644
|
|||
+}
|
||||
+late_initcall(secure_boot_sysrq);
|
||||
+#endif /*CONFIG_MAGIC_SYSRQ*/
|
||||
+
|
||||
+
|
||||
static struct notifier_block kernel_offset_notifier = {
|
||||
.notifier_call = dump_kernel_offset
|
||||
};
|
||||
diff --git a/drivers/input/misc/uinput.c b/drivers/input/misc/uinput.c
|
||||
index a0a4bba..3327cc3 100644
|
||||
index 7728359..a3e8ba8 100644
|
||||
--- a/drivers/input/misc/uinput.c
|
||||
+++ b/drivers/input/misc/uinput.c
|
||||
@@ -351,6 +351,7 @@ static int uinput_allocate_device(struct uinput_device *udev)
|
||||
|
@ -76,10 +83,10 @@ index a0a4bba..3327cc3 100644
|
|||
input_set_drvdata(udev->dev, udev);
|
||||
|
||||
diff --git a/drivers/tty/sysrq.c b/drivers/tty/sysrq.c
|
||||
index d5cc3ac..05b33f5 100644
|
||||
index ce396ec..aee594a 100644
|
||||
--- a/drivers/tty/sysrq.c
|
||||
+++ b/drivers/tty/sysrq.c
|
||||
@@ -461,6 +461,7 @@ static struct sysrq_key_op *sysrq_key_table[36] = {
|
||||
@@ -462,6 +462,7 @@ static struct sysrq_key_op *sysrq_key_table[36] = {
|
||||
&sysrq_showstate_blocked_op, /* w */
|
||||
/* x: May be registered on ppc/powerpc for xmon */
|
||||
/* x: May be registered on sparc64 for global PMU dump */
|
||||
|
@ -87,7 +94,7 @@ index d5cc3ac..05b33f5 100644
|
|||
NULL, /* x */
|
||||
/* y: May be registered on sparc64 for global register dump */
|
||||
NULL, /* y */
|
||||
@@ -504,7 +505,7 @@ static void __sysrq_put_key_op(int key, struct sysrq_key_op *op_p)
|
||||
@@ -505,7 +506,7 @@ static void __sysrq_put_key_op(int key, struct sysrq_key_op *op_p)
|
||||
sysrq_key_table[i] = op_p;
|
||||
}
|
||||
|
||||
|
@ -96,7 +103,7 @@ index d5cc3ac..05b33f5 100644
|
|||
{
|
||||
struct sysrq_key_op *op_p;
|
||||
int orig_log_level;
|
||||
@@ -524,11 +525,15 @@ void __handle_sysrq(int key, bool check_mask)
|
||||
@@ -525,11 +526,15 @@ void __handle_sysrq(int key, bool check_mask)
|
||||
|
||||
op_p = __sysrq_get_key_op(key);
|
||||
if (op_p) {
|
||||
|
@ -113,7 +120,7 @@ index d5cc3ac..05b33f5 100644
|
|||
printk("%s\n", op_p->action_msg);
|
||||
console_loglevel = orig_log_level;
|
||||
op_p->handler(key);
|
||||
@@ -559,7 +564,7 @@ void __handle_sysrq(int key, bool check_mask)
|
||||
@@ -560,7 +565,7 @@ void __handle_sysrq(int key, bool check_mask)
|
||||
void handle_sysrq(int key)
|
||||
{
|
||||
if (sysrq_on())
|
||||
|
@ -122,7 +129,7 @@ index d5cc3ac..05b33f5 100644
|
|||
}
|
||||
EXPORT_SYMBOL(handle_sysrq);
|
||||
|
||||
@@ -639,7 +644,7 @@ static void sysrq_do_reset(unsigned long _state)
|
||||
@@ -640,7 +645,7 @@ static void sysrq_do_reset(unsigned long _state)
|
||||
static void sysrq_handle_reset_request(struct sysrq_state *state)
|
||||
{
|
||||
if (state->reset_requested)
|
||||
|
@ -131,7 +138,7 @@ index d5cc3ac..05b33f5 100644
|
|||
|
||||
if (sysrq_reset_downtime_ms)
|
||||
mod_timer(&state->keyreset_timer,
|
||||
@@ -756,8 +761,10 @@ static bool sysrq_handle_keypress(struct sysrq_state *sysrq,
|
||||
@@ -791,8 +796,10 @@ static bool sysrq_handle_keypress(struct sysrq_state *sysrq,
|
||||
|
||||
default:
|
||||
if (sysrq->active && value && value != 2) {
|
||||
|
@ -143,7 +150,7 @@ index d5cc3ac..05b33f5 100644
|
|||
}
|
||||
break;
|
||||
}
|
||||
@@ -1038,7 +1045,7 @@ static ssize_t write_sysrq_trigger(struct file *file, const char __user *buf,
|
||||
@@ -1080,7 +1087,7 @@ static ssize_t write_sysrq_trigger(struct file *file, const char __user *buf,
|
||||
|
||||
if (get_user(c, buf))
|
||||
return -EFAULT;
|
||||
|
@ -183,10 +190,10 @@ index 82ce323..9e534f2 100644
|
|||
* Verify that we are in sync with input_device_id mod_devicetable.h #defines
|
||||
*/
|
||||
diff --git a/include/linux/sysrq.h b/include/linux/sysrq.h
|
||||
index 7faf933..87ae634 100644
|
||||
index 387fa7d..4b07e30 100644
|
||||
--- a/include/linux/sysrq.h
|
||||
+++ b/include/linux/sysrq.h
|
||||
@@ -31,6 +31,8 @@
|
||||
@@ -28,6 +28,8 @@
|
||||
#define SYSRQ_ENABLE_BOOT 0x0080
|
||||
#define SYSRQ_ENABLE_RTNICE 0x0100
|
||||
|
||||
|
@ -195,7 +202,7 @@ index 7faf933..87ae634 100644
|
|||
struct sysrq_key_op {
|
||||
void (*handler)(int);
|
||||
char *help_msg;
|
||||
@@ -45,8 +47,12 @@ struct sysrq_key_op {
|
||||
@@ -42,8 +44,12 @@ struct sysrq_key_op {
|
||||
* are available -- else NULL's).
|
||||
*/
|
||||
|
||||
|
@ -210,10 +217,10 @@ index 7faf933..87ae634 100644
|
|||
int unregister_sysrq_key(int key, struct sysrq_key_op *op);
|
||||
struct sysrq_key_op *__sysrq_get_key_op(int key);
|
||||
diff --git a/kernel/debug/kdb/kdb_main.c b/kernel/debug/kdb/kdb_main.c
|
||||
index 00eb8f7..54fbbcc 100644
|
||||
index 0b097c8..18b400d 100644
|
||||
--- a/kernel/debug/kdb/kdb_main.c
|
||||
+++ b/kernel/debug/kdb/kdb_main.c
|
||||
@@ -1921,7 +1921,7 @@ static int kdb_sr(int argc, const char **argv)
|
||||
@@ -1924,7 +1924,7 @@ static int kdb_sr(int argc, const char **argv)
|
||||
if (argc != 1)
|
||||
return KDB_ARGCOUNT;
|
||||
kdb_trap_printk++;
|
||||
|
@ -223,7 +230,7 @@ index 00eb8f7..54fbbcc 100644
|
|||
|
||||
return 0;
|
||||
diff --git a/kernel/module.c b/kernel/module.c
|
||||
index bc7c987..5e4e2c2 100644
|
||||
index 92b73b1..a44fb2a 100644
|
||||
--- a/kernel/module.c
|
||||
+++ b/kernel/module.c
|
||||
@@ -109,9 +109,9 @@ struct list_head *kdb_modules = &modules; /* kdb needs the list of modules */
|
||||
|
@ -239,5 +246,5 @@ index bc7c987..5e4e2c2 100644
|
|||
static int param_set_bool_enable_only(const char *val,
|
||||
const struct kernel_param *kp)
|
||||
--
|
||||
1.8.3.1
|
||||
1.8.4.2
|
||||
|
||||
|
|
|
@ -1,158 +0,0 @@
|
|||
Bugzilla: 1065087
|
||||
Upstream-status: 3.14
|
||||
|
||||
From a9c3f68f3cd8d55f809fbdb0c138ed061ea1bd25 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Hurley <peter@hurleysoftware.com>
|
||||
Date: Sat, 22 Feb 2014 12:31:21 +0000
|
||||
Subject: tty: Fix low_latency BUG
|
||||
|
||||
The user-settable knob, low_latency, has been the source of
|
||||
several BUG reports which stem from flush_to_ldisc() running
|
||||
in interrupt context. Since 3.12, which added several sleeping
|
||||
locks (termios_rwsem and buf->lock) to the input processing path,
|
||||
the frequency of these BUG reports has increased.
|
||||
|
||||
Note that changes in 3.12 did not introduce this regression;
|
||||
sleeping locks were first added to the input processing path
|
||||
with the removal of the BKL from N_TTY in commit
|
||||
a88a69c91256418c5907c2f1f8a0ec0a36f9e6cc,
|
||||
'n_tty: Fix loss of echoed characters and remove bkl from n_tty'
|
||||
and later in commit 38db89799bdf11625a831c5af33938dcb11908b6,
|
||||
'tty: throttling race fix'. Since those changes, executing
|
||||
flush_to_ldisc() in interrupt_context (ie, low_latency set), is unsafe.
|
||||
|
||||
However, since most devices do not validate if the low_latency
|
||||
setting is appropriate for the context (process or interrupt) in
|
||||
which they receive data, some reports are due to misconfiguration.
|
||||
Further, serial dma devices for which dma fails, resort to
|
||||
interrupt receiving as a backup without resetting low_latency.
|
||||
|
||||
Historically, low_latency was used to force wake-up the reading
|
||||
process rather than wait for the next scheduler tick. The
|
||||
effect was to trim multiple milliseconds of latency from
|
||||
when the process would receive new data.
|
||||
|
||||
Recent tests [1] have shown that the reading process now receives
|
||||
data with only 10's of microseconds latency without low_latency set.
|
||||
|
||||
Remove the low_latency rx steering from tty_flip_buffer_push();
|
||||
however, leave the knob as an optional hint to drivers that can
|
||||
tune their rx fifos and such like. Cleanup stale code comments
|
||||
regarding low_latency.
|
||||
|
||||
[1] https://lkml.org/lkml/2014/2/20/434
|
||||
|
||||
"Yay.. thats an annoying historical pain in the butt gone."
|
||||
-- Alan Cox
|
||||
|
||||
Reported-by: Beat Bolli <bbolli@ewanet.ch>
|
||||
Reported-by: Pavel Roskin <proski@gnu.org>
|
||||
Acked-by: David Sterba <dsterba@suse.cz>
|
||||
Cc: Grant Edwards <grant.b.edwards@gmail.com>
|
||||
Cc: Stanislaw Gruszka <sgruszka@redhat.com>
|
||||
Cc: Hal Murray <murray+fedora@ip-64-139-1-69.sjc.megapath.net>
|
||||
Cc: <stable@vger.kernel.org> # 3.12.x+
|
||||
Signed-off-by: Peter Hurley <peter@hurleysoftware.com>
|
||||
Signed-off-by: Alan Cox <alan@linux.intel.com>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
---
|
||||
diff --git a/drivers/tty/ipwireless/tty.c b/drivers/tty/ipwireless/tty.c
|
||||
index ebd5bff..17ee3bf 100644
|
||||
--- a/drivers/tty/ipwireless/tty.c
|
||||
+++ b/drivers/tty/ipwireless/tty.c
|
||||
@@ -176,9 +176,6 @@ void ipwireless_tty_received(struct ipw_tty *tty, unsigned char *data,
|
||||
": %d chars not inserted to flip buffer!\n",
|
||||
length - work);
|
||||
|
||||
- /*
|
||||
- * This may sleep if ->low_latency is set
|
||||
- */
|
||||
if (work)
|
||||
tty_flip_buffer_push(&tty->port);
|
||||
}
|
||||
diff --git a/drivers/tty/tty_buffer.c b/drivers/tty/tty_buffer.c
|
||||
index 765125d..8ebd9f8 100644
|
||||
--- a/drivers/tty/tty_buffer.c
|
||||
+++ b/drivers/tty/tty_buffer.c
|
||||
@@ -351,14 +351,11 @@ EXPORT_SYMBOL(tty_insert_flip_string_flags);
|
||||
* Takes any pending buffers and transfers their ownership to the
|
||||
* ldisc side of the queue. It then schedules those characters for
|
||||
* processing by the line discipline.
|
||||
- * Note that this function can only be used when the low_latency flag
|
||||
- * is unset. Otherwise the workqueue won't be flushed.
|
||||
*/
|
||||
|
||||
void tty_schedule_flip(struct tty_port *port)
|
||||
{
|
||||
struct tty_bufhead *buf = &port->buf;
|
||||
- WARN_ON(port->low_latency);
|
||||
|
||||
buf->tail->commit = buf->tail->used;
|
||||
schedule_work(&buf->work);
|
||||
@@ -482,17 +479,15 @@ static void flush_to_ldisc(struct work_struct *work)
|
||||
*/
|
||||
void tty_flush_to_ldisc(struct tty_struct *tty)
|
||||
{
|
||||
- if (!tty->port->low_latency)
|
||||
- flush_work(&tty->port->buf.work);
|
||||
+ flush_work(&tty->port->buf.work);
|
||||
}
|
||||
|
||||
/**
|
||||
* tty_flip_buffer_push - terminal
|
||||
* @port: tty port to push
|
||||
*
|
||||
- * Queue a push of the terminal flip buffers to the line discipline. This
|
||||
- * function must not be called from IRQ context if port->low_latency is
|
||||
- * set.
|
||||
+ * Queue a push of the terminal flip buffers to the line discipline.
|
||||
+ * Can be called from IRQ/atomic context.
|
||||
*
|
||||
* In the event of the queue being busy for flipping the work will be
|
||||
* held off and retried later.
|
||||
@@ -500,14 +495,7 @@ void tty_flush_to_ldisc(struct tty_struct *tty)
|
||||
|
||||
void tty_flip_buffer_push(struct tty_port *port)
|
||||
{
|
||||
- struct tty_bufhead *buf = &port->buf;
|
||||
-
|
||||
- buf->tail->commit = buf->tail->used;
|
||||
-
|
||||
- if (port->low_latency)
|
||||
- flush_to_ldisc(&buf->work);
|
||||
- else
|
||||
- schedule_work(&buf->work);
|
||||
+ tty_schedule_flip(port);
|
||||
}
|
||||
EXPORT_SYMBOL(tty_flip_buffer_push);
|
||||
|
||||
diff --git a/drivers/usb/gadget/u_serial.c b/drivers/usb/gadget/u_serial.c
|
||||
index b369292..ad0aca8 100644
|
||||
--- a/drivers/usb/gadget/u_serial.c
|
||||
+++ b/drivers/usb/gadget/u_serial.c
|
||||
@@ -549,8 +549,8 @@ static void gs_rx_push(unsigned long _port)
|
||||
port->read_started--;
|
||||
}
|
||||
|
||||
- /* Push from tty to ldisc; without low_latency set this is handled by
|
||||
- * a workqueue, so we won't get callbacks and can hold port_lock
|
||||
+ /* Push from tty to ldisc; this is handled by a workqueue,
|
||||
+ * so we won't get callbacks and can hold port_lock
|
||||
*/
|
||||
if (do_push)
|
||||
tty_flip_buffer_push(&port->port);
|
||||
diff --git a/include/linux/tty.h b/include/linux/tty.h
|
||||
index 90b4fdc..b90b5c2 100644
|
||||
--- a/include/linux/tty.h
|
||||
+++ b/include/linux/tty.h
|
||||
@@ -208,7 +208,7 @@ struct tty_port {
|
||||
wait_queue_head_t delta_msr_wait; /* Modem status change */
|
||||
unsigned long flags; /* TTY flags ASY_*/
|
||||
unsigned char console:1, /* port is a console */
|
||||
- low_latency:1; /* direct buffer flush */
|
||||
+ low_latency:1; /* optional: tune for latency */
|
||||
struct mutex mutex; /* Locking */
|
||||
struct mutex buf_mutex; /* Buffer alloc lock */
|
||||
unsigned char *xmit_buf; /* Optional buffer */
|
||||
--
|
||||
cgit v0.9.2
|
Loading…
Reference in New Issue