* [PATCH V2 net-next 24/28] smsc9420: Support the get_ts_info ethtool method.
From: Richard Cochran @ 2012-04-01 15:20 UTC (permalink / raw)
To: netdev
Cc: e1000-devel, Martin Porter, John Ronciak, Ben Hutchings,
David Miller, Jacob Keller
In-Reply-To: <cover.1333289292.git.richardcochran@gmail.com>
Signed-off-by: Richard Cochran <richardcochran@gmail.com>
---
drivers/net/ethernet/smsc/smsc9420.c | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/drivers/net/ethernet/smsc/smsc9420.c b/drivers/net/ethernet/smsc/smsc9420.c
index 3838647..f80ec68 100644
--- a/drivers/net/ethernet/smsc/smsc9420.c
+++ b/drivers/net/ethernet/smsc/smsc9420.c
@@ -469,6 +469,7 @@ static const struct ethtool_ops smsc9420_ethtool_ops = {
.set_eeprom = smsc9420_ethtool_set_eeprom,
.get_regs_len = smsc9420_ethtool_getregslen,
.get_regs = smsc9420_ethtool_getregs,
+ .get_ts_info = ethtool_op_get_ts_info,
};
/* Sets the device MAC address to dev_addr */
--
1.7.2.5
------------------------------------------------------------------------------
This SF email is sponsosred by:
Try Windows Azure free for 90 days Click Here
http://p.sf.net/sfu/sfd2d-msazure
_______________________________________________
E1000-devel mailing list
E1000-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/e1000-devel
To learn more about Intel® Ethernet, visit http://communities.intel.com/community/wired
^ permalink raw reply related
* [PATCH V2 net-next 25/28] stmmac: Support the get_ts_info ethtool method.
From: Richard Cochran @ 2012-04-01 15:20 UTC (permalink / raw)
To: netdev
Cc: e1000-devel, Martin Porter, John Ronciak, Ben Hutchings,
David Miller, Jacob Keller
In-Reply-To: <cover.1333289292.git.richardcochran@gmail.com>
Signed-off-by: Richard Cochran <richardcochran@gmail.com>
---
.../net/ethernet/stmicro/stmmac/stmmac_ethtool.c | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c
index f98e151..ce43184 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c
@@ -481,6 +481,7 @@ static const struct ethtool_ops stmmac_ethtool_ops = {
.get_wol = stmmac_get_wol,
.set_wol = stmmac_set_wol,
.get_sset_count = stmmac_get_sset_count,
+ .get_ts_info = ethtool_op_get_ts_info,
};
void stmmac_set_ethtool_ops(struct net_device *netdev)
--
1.7.2.5
------------------------------------------------------------------------------
This SF email is sponsosred by:
Try Windows Azure free for 90 days Click Here
http://p.sf.net/sfu/sfd2d-msazure
_______________________________________________
E1000-devel mailing list
E1000-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/e1000-devel
To learn more about Intel® Ethernet, visit http://communities.intel.com/community/wired
^ permalink raw reply related
* [PATCH V2 net-next 26/28] tg3: Support the get_ts_info ethtool method.
From: Richard Cochran @ 2012-04-01 15:20 UTC (permalink / raw)
To: netdev
Cc: e1000-devel, Martin Porter, John Ronciak, Ben Hutchings,
David Miller, Jacob Keller
In-Reply-To: <cover.1333289292.git.richardcochran@gmail.com>
Signed-off-by: Richard Cochran <richardcochran@gmail.com>
---
drivers/net/ethernet/broadcom/tg3.c | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c
index 7b71387..8609798 100644
--- a/drivers/net/ethernet/broadcom/tg3.c
+++ b/drivers/net/ethernet/broadcom/tg3.c
@@ -12233,6 +12233,7 @@ static const struct ethtool_ops tg3_ethtool_ops = {
.get_rxfh_indir_size = tg3_get_rxfh_indir_size,
.get_rxfh_indir = tg3_get_rxfh_indir,
.set_rxfh_indir = tg3_set_rxfh_indir,
+ .get_ts_info = ethtool_op_get_ts_info,
};
static struct rtnl_link_stats64 *tg3_get_stats64(struct net_device *dev,
--
1.7.2.5
------------------------------------------------------------------------------
This SF email is sponsosred by:
Try Windows Azure free for 90 days Click Here
http://p.sf.net/sfu/sfd2d-msazure
_______________________________________________
E1000-devel mailing list
E1000-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/e1000-devel
To learn more about Intel® Ethernet, visit http://communities.intel.com/community/wired
^ permalink raw reply related
* [PATCH V2 net-next 27/28] ucc_geth: Support the get_ts_info ethtool method.
From: Richard Cochran @ 2012-04-01 15:20 UTC (permalink / raw)
To: netdev
Cc: e1000-devel, Martin Porter, John Ronciak, Ben Hutchings,
David Miller, Jacob Keller
In-Reply-To: <cover.1333289292.git.richardcochran@gmail.com>
Signed-off-by: Richard Cochran <richardcochran@gmail.com>
---
drivers/net/ethernet/freescale/ucc_geth_ethtool.c | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/drivers/net/ethernet/freescale/ucc_geth_ethtool.c b/drivers/net/ethernet/freescale/ucc_geth_ethtool.c
index a97257f..37b0353 100644
--- a/drivers/net/ethernet/freescale/ucc_geth_ethtool.c
+++ b/drivers/net/ethernet/freescale/ucc_geth_ethtool.c
@@ -415,6 +415,7 @@ static const struct ethtool_ops uec_ethtool_ops = {
.get_ethtool_stats = uec_get_ethtool_stats,
.get_wol = uec_get_wol,
.set_wol = uec_set_wol,
+ .get_ts_info = ethtool_op_get_ts_info,
};
void uec_set_ethtool_ops(struct net_device *netdev)
--
1.7.2.5
------------------------------------------------------------------------------
This SF email is sponsosred by:
Try Windows Azure free for 90 days Click Here
http://p.sf.net/sfu/sfd2d-msazure
_______________________________________________
E1000-devel mailing list
E1000-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/e1000-devel
To learn more about Intel® Ethernet, visit http://communities.intel.com/community/wired
^ permalink raw reply related
* [PATCH V2 net-next 12/28] e100: Support the get_ts_info ethtool method.
From: Richard Cochran @ 2012-04-01 15:19 UTC (permalink / raw)
To: netdev
Cc: David Miller, Ben Hutchings, Martin Porter, Jacob Keller,
Jeff Kirsher, John Ronciak, e1000-devel
In-Reply-To: <cover.1333289292.git.richardcochran@gmail.com>
Signed-off-by: Richard Cochran <richardcochran@gmail.com>
---
drivers/net/ethernet/intel/e100.c | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/drivers/net/ethernet/intel/e100.c b/drivers/net/ethernet/intel/e100.c
index 8a1ba85..eb6b97d 100644
--- a/drivers/net/ethernet/intel/e100.c
+++ b/drivers/net/ethernet/intel/e100.c
@@ -2735,6 +2735,7 @@ static const struct ethtool_ops e100_ethtool_ops = {
.set_phys_id = e100_set_phys_id,
.get_ethtool_stats = e100_get_ethtool_stats,
.get_sset_count = e100_get_sset_count,
+ .get_ts_info = ethtool_op_get_ts_info,
};
static int e100_do_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd)
--
1.7.2.5
^ permalink raw reply related
* [PATCH V2 net-next 20/28] pxa168_eth: Support the get_ts_info ethtool method.
From: Richard Cochran @ 2012-04-01 15:20 UTC (permalink / raw)
To: netdev
Cc: David Miller, Ben Hutchings, Martin Porter, Jacob Keller,
Jeff Kirsher, John Ronciak, e1000-devel
In-Reply-To: <cover.1333289292.git.richardcochran@gmail.com>
Signed-off-by: Richard Cochran <richardcochran@gmail.com>
---
drivers/net/ethernet/marvell/pxa168_eth.c | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/drivers/net/ethernet/marvell/pxa168_eth.c b/drivers/net/ethernet/marvell/pxa168_eth.c
index 45a6333..44bad60 100644
--- a/drivers/net/ethernet/marvell/pxa168_eth.c
+++ b/drivers/net/ethernet/marvell/pxa168_eth.c
@@ -1457,6 +1457,7 @@ static const struct ethtool_ops pxa168_ethtool_ops = {
.set_settings = pxa168_set_settings,
.get_drvinfo = pxa168_get_drvinfo,
.get_link = ethtool_op_get_link,
+ .get_ts_info = ethtool_op_get_ts_info,
};
static const struct net_device_ops pxa168_eth_netdev_ops = {
--
1.7.2.5
^ permalink raw reply related
* [PATCH V2 net-next 28/28] usbnet: Support the get_ts_info ethtool method.
From: Richard Cochran @ 2012-04-01 15:20 UTC (permalink / raw)
To: netdev
Cc: David Miller, Ben Hutchings, Martin Porter, Jacob Keller,
Jeff Kirsher, John Ronciak, e1000-devel
In-Reply-To: <cover.1333289292.git.richardcochran@gmail.com>
Signed-off-by: Richard Cochran <richardcochran@gmail.com>
---
drivers/net/usb/usbnet.c | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c
index b7b3f5b..db99536 100644
--- a/drivers/net/usb/usbnet.c
+++ b/drivers/net/usb/usbnet.c
@@ -884,6 +884,7 @@ static const struct ethtool_ops usbnet_ethtool_ops = {
.get_drvinfo = usbnet_get_drvinfo,
.get_msglevel = usbnet_get_msglevel,
.set_msglevel = usbnet_set_msglevel,
+ .get_ts_info = ethtool_op_get_ts_info,
};
/*-------------------------------------------------------------------------*/
--
1.7.2.5
^ permalink raw reply related
* [PATCH ethtool] Add the command to show the time stamping capabilities.
From: Richard Cochran @ 2012-04-01 15:23 UTC (permalink / raw)
To: netdev
Cc: David Miller, Ben Hutchings, Martin Porter, Jacob Keller,
Jeff Kirsher, John Ronciak, e1000-devel
Signed-off-by: Richard Cochran <richardcochran@gmail.com>
---
ethtool-copy.h | 19 ++++++++++
ethtool.c | 104 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 123 insertions(+), 0 deletions(-)
diff --git a/ethtool-copy.h b/ethtool-copy.h
index d904c1a..dd93cc5 100644
--- a/ethtool-copy.h
+++ b/ethtool-copy.h
@@ -680,6 +680,24 @@ struct ethtool_sfeatures {
struct ethtool_set_features_block features[0];
};
+/**
+ * struct ethtool_ts_info - holds a device's timestamping and PHC association
+ * @cmd: command number = %ETHTOOL_GET_TS_INFO
+ * @so_timestamping: bit mask of SO_TIMESTAMPING modes supported by the device
+ * @phc_index: device index of the associated PHC, or -1 if there is none
+ * @tx_types: bit mask of hwtstamp_tx_types modes supported by the device
+ * @rx_filters: bit mask of hwtstamp_rx_filters modes supported by the device
+ */
+struct ethtool_ts_info {
+ __u32 cmd;
+ __u32 so_timestamping;
+ __s32 phc_index;
+ __u32 tx_types;
+ __u32 tx_reserved[3];
+ __u32 rx_filters;
+ __u32 rx_reserved[3];
+};
+
/*
* %ETHTOOL_SFEATURES changes features present in features[].valid to the
* values of corresponding bits in features[].requested. Bits in .requested
@@ -786,6 +804,7 @@ enum ethtool_sfeatures_retval_bits {
#define ETHTOOL_SET_DUMP 0x0000003e /* Set dump settings */
#define ETHTOOL_GET_DUMP_FLAG 0x0000003f /* Get dump settings */
#define ETHTOOL_GET_DUMP_DATA 0x00000040 /* Get dump data */
+#define ETHTOOL_GET_TS_INFO 0x00000041 /* Get time stamping and PHC info */
/* compatibility with older code */
#define SPARC_ETH_GSET ETHTOOL_GSET
diff --git a/ethtool.c b/ethtool.c
index e80b38b..bef8aa7 100644
--- a/ethtool.c
+++ b/ethtool.c
@@ -38,6 +38,7 @@
#include <netinet/in.h>
#include <arpa/inet.h>
+#include <linux/net_tstamp.h>
#include <linux/sockios.h>
#ifndef MAX_ADDR_LEN
@@ -1115,6 +1116,91 @@ static int dump_rxfhash(int fhash, u64 val)
return 0;
}
+static int dump_tsinfo(const struct ethtool_ts_info *info)
+{
+ if (info->so_timestamping & SOF_TIMESTAMPING_TX_HARDWARE)
+ fprintf(stdout, "SOF_TIMESTAMPING_TX_HARDWARE\n");
+
+ if (info->so_timestamping & SOF_TIMESTAMPING_TX_SOFTWARE)
+ fprintf(stdout, "SOF_TIMESTAMPING_TX_SOFTWARE\n");
+
+ if (info->so_timestamping & SOF_TIMESTAMPING_RX_HARDWARE)
+ fprintf(stdout, "SOF_TIMESTAMPING_RX_HARDWARE\n");
+
+ if (info->so_timestamping & SOF_TIMESTAMPING_RX_SOFTWARE)
+ fprintf(stdout, "SOF_TIMESTAMPING_RX_SOFTWARE\n");
+
+ if (info->so_timestamping & SOF_TIMESTAMPING_SOFTWARE)
+ fprintf(stdout, "SOF_TIMESTAMPING_SOFTWARE\n");
+
+ if (info->so_timestamping & SOF_TIMESTAMPING_SYS_HARDWARE)
+ fprintf(stdout, "SOF_TIMESTAMPING_SYS_HARDWARE\n");
+
+ if (info->so_timestamping & SOF_TIMESTAMPING_RAW_HARDWARE)
+ fprintf(stdout, "SOF_TIMESTAMPING_RAW_HARDWARE\n");
+
+ if (info->phc_index < 0)
+ fprintf(stdout, "No PTP Hardware Clock\n");
+ else
+ fprintf(stdout, "PTP Hardware Clock %d\n", info->phc_index);
+
+ if (info->tx_types & (1 << HWTSTAMP_TX_OFF))
+ fprintf(stdout, "HWTSTAMP_TX_OFF\n");
+
+ if (info->tx_types & (1 << HWTSTAMP_TX_ON))
+ fprintf(stdout, "HWTSTAMP_TX_ON\n");
+
+ if (info->tx_types & (1 << HWTSTAMP_TX_ONESTEP_SYNC))
+ fprintf(stdout, "HWTSTAMP_TX_ONESTEP_SYNC\n");
+
+ if (info->rx_filters & (1 << HWTSTAMP_FILTER_NONE))
+ fprintf(stdout, "HWTSTAMP_FILTER_NONE\n");
+
+ if (info->rx_filters & (1 << HWTSTAMP_FILTER_ALL))
+ fprintf(stdout, "HWTSTAMP_FILTER_ALL\n");
+
+ if (info->rx_filters & (1 << HWTSTAMP_FILTER_SOME))
+ fprintf(stdout, "HWTSTAMP_FILTER_SOME\n");
+
+ if (info->rx_filters & (1 << HWTSTAMP_FILTER_PTP_V1_L4_EVENT))
+ fprintf(stdout, "HWTSTAMP_FILTER_PTP_V1_L4_EVENT\n");
+
+ if (info->rx_filters & (1 << HWTSTAMP_FILTER_PTP_V1_L4_SYNC))
+ fprintf(stdout, "HWTSTAMP_FILTER_PTP_V1_L4_SYNC\n");
+
+ if (info->rx_filters & (1 << HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ))
+ fprintf(stdout, "HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ\n");
+
+ if (info->rx_filters & (1 << HWTSTAMP_FILTER_PTP_V2_L4_EVENT))
+ fprintf(stdout, "HWTSTAMP_FILTER_PTP_V2_L4_EVENT\n");
+
+ if (info->rx_filters & (1 << HWTSTAMP_FILTER_PTP_V2_L4_SYNC))
+ fprintf(stdout, "HWTSTAMP_FILTER_PTP_V2_L4_SYNC\n");
+
+ if (info->rx_filters & (1 << HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ))
+ fprintf(stdout, "HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ\n");
+
+ if (info->rx_filters & (1 << HWTSTAMP_FILTER_PTP_V2_L2_EVENT))
+ fprintf(stdout, "HWTSTAMP_FILTER_PTP_V2_L2_EVENT\n");
+
+ if (info->rx_filters & (1 << HWTSTAMP_FILTER_PTP_V2_L2_SYNC))
+ fprintf(stdout, "HWTSTAMP_FILTER_PTP_V2_L2_SYNC\n");
+
+ if (info->rx_filters & (1 << HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ))
+ fprintf(stdout, "HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ\n");
+
+ if (info->rx_filters & (1 << HWTSTAMP_FILTER_PTP_V2_EVENT))
+ fprintf(stdout, "HWTSTAMP_FILTER_PTP_V2_EVENT\n");
+
+ if (info->rx_filters & (1 << HWTSTAMP_FILTER_PTP_V2_SYNC))
+ fprintf(stdout, "HWTSTAMP_FILTER_PTP_V2_SYNC\n");
+
+ if (info->rx_filters & (1 << HWTSTAMP_FILTER_PTP_V2_DELAY_REQ))
+ fprintf(stdout, "HWTSTAMP_FILTER_PTP_V2_DELAY_REQ\n");
+
+ return 0;
+}
+
static struct ethtool_gstrings *
get_stringset(struct cmd_context *ctx, enum ethtool_stringset set_id,
ptrdiff_t drvinfo_offset)
@@ -3077,6 +3163,23 @@ static int do_sprivflags(struct cmd_context *ctx)
return 0;
}
+static int do_tsinfo(struct cmd_context *ctx)
+{
+ struct ethtool_ts_info info;
+
+ if (ctx->argc != 0)
+ exit_bad_args();
+
+ fprintf(stdout, "Time stamping parameters for %s:\n", ctx->devname);
+ info.cmd = ETHTOOL_GET_TS_INFO;
+ if (send_ioctl(ctx, &info)) {
+ perror("Cannot get device time stamping settings");
+ return -1;
+ }
+ dump_tsinfo(&info);
+ return 0;
+}
+
int send_ioctl(struct cmd_context *ctx, void *cmd)
{
#ifndef TEST_ETHTOOL
@@ -3206,6 +3309,7 @@ static const struct option {
" [ action %d ]\n"
" [ loc %d]] |\n"
" delete %d\n" },
+ { "-T|--timestamping", 1, do_tsinfo, "Show time stamping options" },
{ "-x|--show-rxfh-indir", 1, do_grxfhindir,
"Show Rx flow hash indirection" },
{ "-X|--set-rxfh-indir", 1, do_srxfhindir,
--
1.7.2.5
^ permalink raw reply related
* Re: [PATCH] netfilter: don't do window scaling for a picked up connection
From: Pablo Neira Ayuso @ 2012-04-01 16:21 UTC (permalink / raw)
To: Changli Gao; +Cc: Patrick McHardy, David S. Miller, netfilter-devel, netdev
In-Reply-To: <1333292683-31414-1-git-send-email-xiaosuo@gmail.com>
On Sun, Apr 01, 2012 at 11:04:43PM +0800, Changli Gao wrote:
> For a picked up connection, the window scaling option is also lost, because this
> option is only valid in SYN or SYN/ACK segments. We should remove the useless
> expression to save the CPU power.
>
> Signed-off-by: Changli Gao <xiaosuo@gmail.com>
> ---
> net/netfilter/nf_conntrack_proto_tcp.c | 1 -
> 1 file changed, 1 deletion(-)
> diff --git a/net/netfilter/nf_conntrack_proto_tcp.c b/net/netfilter/nf_conntrack_proto_tcp.c
> index 361eade..22f0500 100644
> --- a/net/netfilter/nf_conntrack_proto_tcp.c
> +++ b/net/netfilter/nf_conntrack_proto_tcp.c
> @@ -584,7 +584,6 @@ static bool tcp_in_window(const struct nf_conn *ct,
> * Let's try to use the data from the packet.
> */
> sender->td_end = end;
> - win <<= sender->td_scale;
This breaks conntrackd and its ability to recover flows by injecting
the window scaling via ctnetlink.
^ permalink raw reply
* Re: [PATCH] netfilter: don't do window scaling for a picked up connection
From: Changli Gao @ 2012-04-01 16:41 UTC (permalink / raw)
To: Pablo Neira Ayuso
Cc: Patrick McHardy, David S. Miller, netfilter-devel, netdev
In-Reply-To: <20120401162155.GA10861@1984>
On Mon, Apr 2, 2012 at 12:21 AM, Pablo Neira Ayuso <pablo@netfilter.org> wrote:
>
> This breaks conntrackd and its ability to recover flows by injecting
> the window scaling via ctnetlink.
Got it. Thanks.
Just forget this patch. I'll post another patch to fix the duplicate
window scaling: one is here, and the other is before the state
updating code.
--
Regards,
Changli Gao(xiaosuo@gmail.com)
^ permalink raw reply
* Re: [PATCH] netfilter: check the length of the data before dereferencing it
From: Pablo Neira Ayuso @ 2012-04-01 16:43 UTC (permalink / raw)
To: Changli Gao; +Cc: Patrick McHardy, David S. Miller, netfilter-devel, netdev
In-Reply-To: <1333290170-26898-1-git-send-email-xiaosuo@gmail.com>
On Sun, Apr 01, 2012 at 10:22:50PM +0800, Changli Gao wrote:
> We should check the length of the data before dereferencing it when parsing
> the TCP options.
>
> Signed-off-by: Changli Gao <xiaosuo@gmail.com>
> ---
> net/netfilter/nf_conntrack_proto_tcp.c | 4 ++++
> 1 file changed, 4 insertions(+)
> diff --git a/net/netfilter/nf_conntrack_proto_tcp.c b/net/netfilter/nf_conntrack_proto_tcp.c
> index 361eade..9e446c5 100644
> --- a/net/netfilter/nf_conntrack_proto_tcp.c
> +++ b/net/netfilter/nf_conntrack_proto_tcp.c
> @@ -404,6 +404,8 @@ static void tcp_options(const struct sk_buff *skb,
> length--;
> continue;
> default:
> + if (length < 2)
> + return;
> opsize=*ptr++;
> if (opsize < 2) /* "silly options" */
> return;
length is always multiple of 4:
int length = (tcph->doff*4) - sizeof(struct tcphdr);
^ permalink raw reply
* Re: [PATCH] netfilter: check the length of the data before dereferencing it
From: Eric Dumazet @ 2012-04-01 16:55 UTC (permalink / raw)
To: Pablo Neira Ayuso
Cc: Changli Gao, Patrick McHardy, David S. Miller, netfilter-devel,
netdev
In-Reply-To: <20120401164325.GB10861@1984>
On Sun, 2012-04-01 at 18:43 +0200, Pablo Neira Ayuso wrote:
> On Sun, Apr 01, 2012 at 10:22:50PM +0800, Changli Gao wrote:
> > We should check the length of the data before dereferencing it when parsing
> > the TCP options.
> >
> > Signed-off-by: Changli Gao <xiaosuo@gmail.com>
> > ---
> > net/netfilter/nf_conntrack_proto_tcp.c | 4 ++++
> > 1 file changed, 4 insertions(+)
> > diff --git a/net/netfilter/nf_conntrack_proto_tcp.c b/net/netfilter/nf_conntrack_proto_tcp.c
> > index 361eade..9e446c5 100644
> > --- a/net/netfilter/nf_conntrack_proto_tcp.c
> > +++ b/net/netfilter/nf_conntrack_proto_tcp.c
> > @@ -404,6 +404,8 @@ static void tcp_options(const struct sk_buff *skb,
> > length--;
> > continue;
> > default:
> > + if (length < 2)
> > + return;
> > opsize=*ptr++;
> > if (opsize < 2) /* "silly options" */
> > return;
>
> length is always multiple of 4:
>
> int length = (tcph->doff*4) - sizeof(struct tcphdr);
> --
initial value yes, but it can change in the loop.
^ permalink raw reply
* Re: [PATCH] netfilter: check the length of the data before dereferencing it
From: Pablo Neira Ayuso @ 2012-04-01 17:02 UTC (permalink / raw)
To: Eric Dumazet
Cc: Changli Gao, Patrick McHardy, David S. Miller, netfilter-devel,
netdev
In-Reply-To: <1333299322.2325.5277.camel@edumazet-glaptop>
On Sun, Apr 01, 2012 at 06:55:22PM +0200, Eric Dumazet wrote:
> On Sun, 2012-04-01 at 18:43 +0200, Pablo Neira Ayuso wrote:
> > On Sun, Apr 01, 2012 at 10:22:50PM +0800, Changli Gao wrote:
> > > We should check the length of the data before dereferencing it when parsing
> > > the TCP options.
> > >
> > > Signed-off-by: Changli Gao <xiaosuo@gmail.com>
> > > ---
> > > net/netfilter/nf_conntrack_proto_tcp.c | 4 ++++
> > > 1 file changed, 4 insertions(+)
> > > diff --git a/net/netfilter/nf_conntrack_proto_tcp.c b/net/netfilter/nf_conntrack_proto_tcp.c
> > > index 361eade..9e446c5 100644
> > > --- a/net/netfilter/nf_conntrack_proto_tcp.c
> > > +++ b/net/netfilter/nf_conntrack_proto_tcp.c
> > > @@ -404,6 +404,8 @@ static void tcp_options(const struct sk_buff *skb,
> > > length--;
> > > continue;
> > > default:
> > > + if (length < 2)
> > > + return;
> > > opsize=*ptr++;
> > > if (opsize < 2) /* "silly options" */
> > > return;
> >
> > length is always multiple of 4:
> >
> > int length = (tcph->doff*4) - sizeof(struct tcphdr);
> > --
>
> initial value yes, but it can change in the loop.
Indeed, then I think we need a similar patch for tcp_parse_options()
in net/ipv4/tcp_input.c
^ permalink raw reply
* Re: ipv6: tunnel: hang when destroying ipv6 tunnel
From: Oleg Nesterov @ 2012-04-01 16:38 UTC (permalink / raw)
To: Sasha Levin
Cc: Eric Dumazet, davem, kuznet, jmorris, yoshfuji, Patrick McHardy,
netdev, linux-kernel@vger.kernel.org List, Dave Jones,
Tetsuo Handa
In-Reply-To: <CA+1xoqe1Wc_uifrKsko6hu+py9Ahz3Q0p1tRxup09jmh2NZ1rw@mail.gmail.com>
On 04/01, Sasha Levin wrote:
>
> >> It would be nice to know what sysrq-t says, in particular the trace
> >> of khelper thread is interesting.
> >
> > Sure, I'll get one when it happens again.
>
> So here's the stack of the usermode thread:
Great, thanks, this is even better than khelper's trace,
> [ 336.614015] [<ffffffff826a8e54>] schedule+0x24/0x70
> [ 336.614015] [<ffffffff825fd66d>] p9_client_rpc+0x13d/0x360
> [ 336.614015] [<ffffffff810d7850>] ? wake_up_bit+0x40/0x40
> [ 336.614015] [<ffffffff810e3671>] ? get_parent_ip+0x11/0x50
> [ 336.614015] [<ffffffff810e399d>] ? sub_preempt_count+0x9d/0xd0
> [ 336.614015] [<ffffffff825ff5ff>] p9_client_walk+0x8f/0x220
> [ 336.614015] [<ffffffff815a8e3b>] v9fs_vfs_lookup+0xab/0x1c0
> [ 336.614015] [<ffffffff811ee0c0>] d_alloc_and_lookup+0x40/0x80
> [ 336.614015] [<ffffffff811fdea0>] ? d_lookup+0x30/0x50
> [ 336.614015] [<ffffffff811f0aea>] do_lookup+0x28a/0x3b0
> [ 336.614015] [<ffffffff817c9117>] ? security_inode_permission+0x17/0x20
> [ 336.614015] [<ffffffff811f1c07>] link_path_walk+0x167/0x420
> [ 336.614015] [<ffffffff811ee630>] ? generic_readlink+0xb0/0xb0
> [ 336.614015] [<ffffffff81896d88>] ? __raw_spin_lock_init+0x38/0x70
> [ 336.614015] [<ffffffff811f24da>] path_openat+0xba/0x500
> [ 336.614015] [<ffffffff81057253>] ? sched_clock+0x13/0x20
> [ 336.614015] [<ffffffff810ed805>] ? sched_clock_local+0x25/0x90
> [ 336.614015] [<ffffffff810ed940>] ? sched_clock_cpu+0xd0/0x120
> [ 336.614015] [<ffffffff811f2a34>] do_filp_open+0x44/0xa0
> [ 336.614015] [<ffffffff81119acd>] ? __lock_release+0x8d/0x1d0
> [ 336.614015] [<ffffffff810e3671>] ? get_parent_ip+0x11/0x50
> [ 336.614015] [<ffffffff810e399d>] ? sub_preempt_count+0x9d/0xd0
> [ 336.614015] [<ffffffff826aa7f0>] ? _raw_spin_unlock+0x30/0x60
> [ 336.614015] [<ffffffff811ea74d>] open_exec+0x2d/0xf0
> [ 336.614015] [<ffffffff811eb888>] do_execve_common+0x128/0x320
> [ 336.614015] [<ffffffff811ebb05>] do_execve+0x35/0x40
> [ 336.614015] [<ffffffff810589e5>] sys_execve+0x45/0x70
> [ 336.614015] [<ffffffff826acc28>] kernel_execve+0x68/0xd0
> [ 336.614015] [<ffffffff810cd6a6>] ? ____call_usermodehelper+0xf6/0x130
> [ 336.614015] [<ffffffff810cd6f9>] call_helper+0x19/0x20
> [ 336.614015] [<ffffffff826acbb4>] kernel_thread_helper+0x4/0x10
> [ 336.614015] [<ffffffff810e3f80>] ? finish_task_switch+0x80/0x110
> [ 336.614015] [<ffffffff826aaeb4>] ? retint_restore_args+0x13/0x13
> [ 336.614015] [<ffffffff810cd6e0>] ? ____call_usermodehelper+0x130/0x130
> [ 336.614015] [<ffffffff826acbb0>] ? gs_change+0x13/0x13
>
> While it seems that 9p is the culprit, I have to point out that this
> bug is easily reproducible, and it happens each time due to a
> call_usermode_helper() call. Other than that 9p behaves perfectly and
> I'd assume that I'd be seeing other things break besides
> call_usermode_helper() related ones.
Of course I do not know what happens, but at least this obviously
explains why UMH_WAIT_EXEC hangs, I think call_usermodehelper_exec()
itself is innocent.
Oleg.
^ permalink raw reply
* Re: ipv6: tunnel: hang when destroying ipv6 tunnel
From: Sasha Levin @ 2012-04-01 17:33 UTC (permalink / raw)
To: Tetsuo Handa
Cc: oleg, eric.dumazet, davem, kuznet, jmorris, yoshfuji, kaber,
netdev, linux-kernel, davej
In-Reply-To: <201204011221.GAG51016.JQFSFFOtLOMVHO@I-love.SAKURA.ne.jp>
On Sun, Apr 1, 2012 at 5:21 AM, Tetsuo Handa
<penguin-kernel@i-love.sakura.ne.jp> wrote:
> Sasha Levin wrote:
>> While it seems that 9p is the culprit, I have to point out that this
>> bug is easily reproducible, and it happens each time due to a
>> call_usermode_helper() call. Other than that 9p behaves perfectly and
>> I'd assume that I'd be seeing other things break besides
>> call_usermode_helper() related ones.
>
> I think one of below two patches can catch the bug if this is a usermodehelper
> related bug. Please try.
>
> ----- Patch 1 -----
> diff --git a/kernel/kmod.c b/kernel/kmod.c
> index 01394b6..3e63319 100644
> --- a/kernel/kmod.c
> +++ b/kernel/kmod.c
> @@ -571,7 +571,7 @@ int call_usermodehelper_exec(struct subprocess_info *sub_info, int wait)
> * flag, for khelper thread is already waiting for the thread at
> * wait_for_completion() in do_fork().
> */
> - if (wait != UMH_NO_WAIT && current == kmod_thread_locker) {
> + if (WARN_ON(wait != UMH_NO_WAIT && current == kmod_thread_locker)) {
> retval = -EBUSY;
> goto out;
> }
>
>
> ----- Patch 2 -----
> diff --git a/include/linux/kmod.h b/include/linux/kmod.h
> index 9efeae6..1350670 100644
> --- a/include/linux/kmod.h
> +++ b/include/linux/kmod.h
> @@ -48,10 +48,10 @@ static inline int request_module_nowait(const char *name, ...) { return -ENOSYS;
> struct cred;
> struct file;
>
> -#define UMH_NO_WAIT 0 /* don't wait at all */
> -#define UMH_WAIT_EXEC 1 /* wait for the exec, but not the process */
> -#define UMH_WAIT_PROC 2 /* wait for the process to complete */
> -#define UMH_KILLABLE 4 /* wait for EXEC/PROC killable */
> +#define UMH_NO_WAIT 0x10 /* don't wait at all */
> +#define UMH_WAIT_EXEC 0x11 /* wait for the exec, but not the process */
> +#define UMH_WAIT_PROC 0x12 /* wait for the process to complete */
> +#define UMH_KILLABLE 0x04 /* wait for EXEC/PROC killable */
>
> struct subprocess_info {
> struct work_struct work;
> diff --git a/kernel/kmod.c b/kernel/kmod.c
> index 957a7aa..ecfd3d5 100644
> --- a/kernel/kmod.c
> +++ b/kernel/kmod.c
> @@ -483,6 +483,18 @@ int call_usermodehelper_exec(struct subprocess_info *sub_info, int wait)
> DECLARE_COMPLETION_ONSTACK(done);
> int retval = 0;
>
> + if (unlikely(wait == -1 || wait == 0 || wait == 1)) {
> + WARN(1, "Requesting for usermode helper with hardcoded wait "
> + "flag. Change to use UMH_* symbols and recompile, or "
> + "this request will fail on Linux 3.4.\n");
> + if (wait == -1)
> + wait = UMH_NO_WAIT;
> + else if (wait == 0)
> + wait = UMH_WAIT_EXEC;
> + else
> + wait = UMH_WAIT_PROC;
> + }
> +
> helper_lock();
> if (sub_info->path[0] == '\0')
> goto out;
Neither of these patches did the trick (no warnings showing up and
still seeing the hangs). However, the following patch has fixed it:
diff --git a/lib/kobject_uevent.c b/lib/kobject_uevent.c
index 1a91efa..8ecc377 100644
--- a/lib/kobject_uevent.c
+++ b/lib/kobject_uevent.c
@@ -309,7 +309,7 @@ int kobject_uevent_env(struct kobject *kobj, enum
kobject_action action,
goto exit;
retval = call_usermodehelper(argv[0], argv,
- env->envp, UMH_WAIT_EXEC);
+ env->envp, UMH_NO_WAIT);
}
exit:
Not sure if that info helps any, but just in case.
^ permalink raw reply related
* [PATCH 1/8] net/ipv6/sit.c: Checkpatch cleanup
From: Eldad Zack @ 2012-04-01 17:49 UTC (permalink / raw)
To: David S. Miller, Alexey Kuznetsov, James Morris,
Hideaki YOSHIFUJI, Patrick McHardy
Cc: netdev, linux-kernel, Eldad Zack
sit.c:118: ERROR: "foo * bar" should be "foo *bar"
sit.c:694: ERROR: "(foo*)" should be "(foo *)"
sit.c:724: ERROR: "(foo*)" should be "(foo *)"
Signed-off-by: Eldad Zack <eldad@fogrefinery.com>
---
net/ipv6/sit.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/net/ipv6/sit.c b/net/ipv6/sit.c
index c4ffd17..f9608db 100644
--- a/net/ipv6/sit.c
+++ b/net/ipv6/sit.c
@@ -115,7 +115,7 @@ static struct net_device_stats *ipip6_get_stats(struct net_device *dev)
/*
* Must be invoked with rcu_read_lock
*/
-static struct ip_tunnel * ipip6_tunnel_lookup(struct net *net,
+static struct ip_tunnel *ipip6_tunnel_lookup(struct net *net,
struct net_device *dev, __be32 remote, __be32 local)
{
unsigned int h0 = HASH(remote);
@@ -691,7 +691,7 @@ static netdev_tx_t ipip6_tunnel_xmit(struct sk_buff *skb,
goto tx_error;
}
- addr6 = (const struct in6_addr*)&neigh->primary_key;
+ addr6 = (const struct in6_addr *)&neigh->primary_key;
addr_type = ipv6_addr_type(addr6);
if ((addr_type & IPV6_ADDR_UNICAST) &&
@@ -721,7 +721,7 @@ static netdev_tx_t ipip6_tunnel_xmit(struct sk_buff *skb,
goto tx_error;
}
- addr6 = (const struct in6_addr*)&neigh->primary_key;
+ addr6 = (const struct in6_addr *)&neigh->primary_key;
addr_type = ipv6_addr_type(addr6);
if (addr_type == IPV6_ADDR_ANY) {
--
1.7.9.5
^ permalink raw reply related
* [PATCH 3/8] net/ipv6/datagram.c: Checkpatch cleanups
From: Eldad Zack @ 2012-04-01 17:49 UTC (permalink / raw)
To: David S. Miller, Alexey Kuznetsov, James Morris,
Hideaki YOSHIFUJI, Patrick McHardy
Cc: netdev, linux-kernel, Eldad Zack
In-Reply-To: <1333302548-9187-1-git-send-email-eldad@fogrefinery.com>
datagram.c:101: ERROR: "(foo*)" should be "(foo *)"
datagram.c:521: ERROR: space required before the open parenthesis '('
datagram.c:830: WARNING: braces {} are not necessary for single statement blocks
datagram.c:849: WARNING: braces {} are not necessary for single statement blocks
Signed-off-by: Eldad Zack <eldad@fogrefinery.com>
---
net/ipv6/datagram.c | 10 ++++------
1 file changed, 4 insertions(+), 6 deletions(-)
diff --git a/net/ipv6/datagram.c b/net/ipv6/datagram.c
index 76832c8..f6210d6 100644
--- a/net/ipv6/datagram.c
+++ b/net/ipv6/datagram.c
@@ -98,7 +98,7 @@ int ip6_datagram_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
sin.sin_port = usin->sin6_port;
err = ip4_datagram_connect(sk,
- (struct sockaddr*) &sin,
+ (struct sockaddr *) &sin,
sizeof(sin));
ipv4_connected:
@@ -518,7 +518,7 @@ int datagram_recv_ctl(struct sock *sk, struct msghdr *msg, struct sk_buff *skb)
unsigned len;
u8 *ptr = nh + off;
- switch(nexthdr) {
+ switch (nexthdr) {
case IPPROTO_DSTOPTS:
nexthdr = ptr[0];
len = (ptr[1] + 1) << 3;
@@ -827,9 +827,8 @@ int datagram_send_ctl(struct net *net, struct sock *sk,
int tc;
err = -EINVAL;
- if (cmsg->cmsg_len != CMSG_LEN(sizeof(int))) {
+ if (cmsg->cmsg_len != CMSG_LEN(sizeof(int)))
goto exit_f;
- }
tc = *(int *)CMSG_DATA(cmsg);
if (tc < -1 || tc > 0xff)
@@ -846,9 +845,8 @@ int datagram_send_ctl(struct net *net, struct sock *sk,
int df;
err = -EINVAL;
- if (cmsg->cmsg_len != CMSG_LEN(sizeof(int))) {
+ if (cmsg->cmsg_len != CMSG_LEN(sizeof(int)))
goto exit_f;
- }
df = *(int *)CMSG_DATA(cmsg);
if (df < 0 || df > 1)
--
1.7.9.5
^ permalink raw reply related
* [PATCH 4/8] net/ipv6/exthdrs.c: Checkpatch cleanups
From: Eldad Zack @ 2012-04-01 17:49 UTC (permalink / raw)
To: David S. Miller, Alexey Kuznetsov, James Morris,
Hideaki YOSHIFUJI, Patrick McHardy
Cc: netdev, linux-kernel, Eldad Zack
In-Reply-To: <1333302548-9187-1-git-send-email-eldad@fogrefinery.com>
exthdrs.c:726: WARNING: EXPORT_SYMBOL(foo); should immediately follow its function/variable
exthdrs.c:741: ERROR: "(foo*)" should be "(foo *)"
exthdrs.c:741: ERROR: "(foo*)" should be "(foo *)"
exthdrs.c:744: ERROR: "(foo**)" should be "(foo **)"
exthdrs.c:746: ERROR: "(foo**)" should be "(foo **)"
exthdrs.c:748: ERROR: "(foo**)" should be "(foo **)"
exthdrs.c:750: ERROR: "(foo**)" should be "(foo **)"
exthdrs.c:755: WARNING: EXPORT_SYMBOL(foo); should immediately follow its function/variable
exthdrs.c:896: WARNING: EXPORT_SYMBOL(foo); should immediately follow its function/variable
Signed-off-by: Eldad Zack <eldad@fogrefinery.com>
---
net/ipv6/exthdrs.c | 13 +++++--------
1 file changed, 5 insertions(+), 8 deletions(-)
diff --git a/net/ipv6/exthdrs.c b/net/ipv6/exthdrs.c
index 3d641b6..c486b8e 100644
--- a/net/ipv6/exthdrs.c
+++ b/net/ipv6/exthdrs.c
@@ -722,7 +722,6 @@ void ipv6_push_nfrag_opts(struct sk_buff *skb, struct ipv6_txoptions *opt,
if (opt->hopopt)
ipv6_push_exthdr(skb, proto, NEXTHDR_HOP, opt->hopopt);
}
-
EXPORT_SYMBOL(ipv6_push_nfrag_opts);
void ipv6_push_frag_opts(struct sk_buff *skb, struct ipv6_txoptions *opt, u8 *proto)
@@ -738,20 +737,19 @@ ipv6_dup_options(struct sock *sk, struct ipv6_txoptions *opt)
opt2 = sock_kmalloc(sk, opt->tot_len, GFP_ATOMIC);
if (opt2) {
- long dif = (char*)opt2 - (char*)opt;
+ long dif = (char *)opt2 - (char *)opt;
memcpy(opt2, opt, opt->tot_len);
if (opt2->hopopt)
- *((char**)&opt2->hopopt) += dif;
+ *((char **)&opt2->hopopt) += dif;
if (opt2->dst0opt)
- *((char**)&opt2->dst0opt) += dif;
+ *((char **)&opt2->dst0opt) += dif;
if (opt2->dst1opt)
- *((char**)&opt2->dst1opt) += dif;
+ *((char **)&opt2->dst1opt) += dif;
if (opt2->srcrt)
- *((char**)&opt2->srcrt) += dif;
+ *((char **)&opt2->srcrt) += dif;
}
return opt2;
}
-
EXPORT_SYMBOL_GPL(ipv6_dup_options);
static int ipv6_renew_option(void *ohdr,
@@ -892,5 +890,4 @@ struct in6_addr *fl6_update_dst(struct flowi6 *fl6,
fl6->daddr = *((struct rt0_hdr *)opt->srcrt)->addr;
return orig;
}
-
EXPORT_SYMBOL_GPL(fl6_update_dst);
--
1.7.9.5
^ permalink raw reply related
* [PATCH 5/8] net/ipv6/exthdrs_core.c: Checkpatch cleanups
From: Eldad Zack @ 2012-04-01 17:49 UTC (permalink / raw)
To: David S. Miller, Alexey Kuznetsov, James Morris,
Hideaki YOSHIFUJI, Patrick McHardy
Cc: netdev, linux-kernel, Eldad Zack
In-Reply-To: <1333302548-9187-1-git-send-email-eldad@fogrefinery.com>
exthdrs_core.c:113: WARNING: EXPORT_SYMBOL(foo); should immediately follow its function/variable
exthdrs_core.c:114: WARNING: EXPORT_SYMBOL(foo); should immediately follow its function/variable
Signed-off-by: Eldad Zack <eldad@fogrefinery.com>
---
net/ipv6/exthdrs_core.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/net/ipv6/exthdrs_core.c b/net/ipv6/exthdrs_core.c
index 72957f4..7b1a884 100644
--- a/net/ipv6/exthdrs_core.c
+++ b/net/ipv6/exthdrs_core.c
@@ -21,6 +21,7 @@ int ipv6_ext_hdr(u8 nexthdr)
(nexthdr == NEXTHDR_NONE) ||
(nexthdr == NEXTHDR_DEST);
}
+EXPORT_SYMBOL(ipv6_ext_hdr);
/*
* Skip any extension headers. This is used by the ICMP module.
@@ -109,6 +110,4 @@ int ipv6_skip_exthdr(const struct sk_buff *skb, int start, u8 *nexthdrp,
*nexthdrp = nexthdr;
return start;
}
-
-EXPORT_SYMBOL(ipv6_ext_hdr);
EXPORT_SYMBOL(ipv6_skip_exthdr);
--
1.7.9.5
^ permalink raw reply related
* [PATCH 6/8] net/ipv6/fib6_rules.c: Checkpatch cleanup
From: Eldad Zack @ 2012-04-01 17:49 UTC (permalink / raw)
To: David S. Miller, Alexey Kuznetsov, James Morris,
Hideaki YOSHIFUJI, Patrick McHardy
Cc: netdev, linux-kernel, Eldad Zack
In-Reply-To: <1333302548-9187-1-git-send-email-eldad@fogrefinery.com>
fib6_rules.c:26: ERROR: open brace '{' following struct go on the same line
Signed-off-by: Eldad Zack <eldad@fogrefinery.com>
---
net/ipv6/fib6_rules.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/net/ipv6/fib6_rules.c b/net/ipv6/fib6_rules.c
index b6c5731..da75c67 100644
--- a/net/ipv6/fib6_rules.c
+++ b/net/ipv6/fib6_rules.c
@@ -22,8 +22,7 @@
#include <net/ip6_route.h>
#include <net/netlink.h>
-struct fib6_rule
-{
+struct fib6_rule {
struct fib_rule common;
struct rt6key src;
struct rt6key dst;
--
1.7.9.5
^ permalink raw reply related
* [PATCH 8/8] net/ipv6/addrconf.c: Checkpatch cleanups
From: Eldad Zack @ 2012-04-01 17:49 UTC (permalink / raw)
To: David S. Miller, Alexey Kuznetsov, James Morris,
Hideaki YOSHIFUJI, Patrick McHardy
Cc: netdev, linux-kernel, Eldad Zack
In-Reply-To: <1333302548-9187-1-git-send-email-eldad@fogrefinery.com>
net/ipv6/addrconf.c:340: WARNING: EXPORT_SYMBOL(foo); should immediately follow its function/variable
net/ipv6/addrconf.c:342: ERROR: "foo * bar" should be "foo *bar"
net/ipv6/addrconf.c:444: ERROR: "foo * bar" should be "foo *bar"
net/ipv6/addrconf.c:1337: WARNING: EXPORT_SYMBOL(foo); should immediately follow its function/variable
net/ipv6/addrconf.c:1526: ERROR: "(foo*)" should be "(foo *)"
net/ipv6/addrconf.c:1671: ERROR: open brace '{' following function declarations go on the next line
net/ipv6/addrconf.c:1914: ERROR: "foo * bar" should be "foo *bar"
net/ipv6/addrconf.c:2368: ERROR: "foo * bar" should be "foo *bar"
net/ipv6/addrconf.c:2370: ERROR: "foo * bar" should be "foo *bar"
net/ipv6/addrconf.c:2416: ERROR: "foo * bar" should be "foo *bar"
net/ipv6/addrconf.c:2437: ERROR: "foo * bar" should be "foo *bar"
net/ipv6/addrconf.c:2573: ERROR: "foo * bar" should be "foo *bar"
net/ipv6/addrconf.c:3797: ERROR: "foo* bar" should be "foo *bar"
Signed-off-by: Eldad Zack <eldad@fogrefinery.com>
---
net/ipv6/addrconf.c | 25 ++++++++++++-------------
1 file changed, 12 insertions(+), 13 deletions(-)
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
index 6a3bb60..0031f05 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -336,10 +336,9 @@ void in6_dev_finish_destroy(struct inet6_dev *idev)
snmp6_free_dev(idev);
kfree_rcu(idev, rcu);
}
-
EXPORT_SYMBOL(in6_dev_finish_destroy);
-static struct inet6_dev * ipv6_add_dev(struct net_device *dev)
+static struct inet6_dev *ipv6_add_dev(struct net_device *dev)
{
struct inet6_dev *ndev;
@@ -441,7 +440,7 @@ static struct inet6_dev * ipv6_add_dev(struct net_device *dev)
return ndev;
}
-static struct inet6_dev * ipv6_find_idev(struct net_device *dev)
+static struct inet6_dev *ipv6_find_idev(struct net_device *dev)
{
struct inet6_dev *idev;
@@ -1333,7 +1332,6 @@ int ipv6_chk_prefix(const struct in6_addr *addr, struct net_device *dev)
rcu_read_unlock();
return onlink;
}
-
EXPORT_SYMBOL(ipv6_chk_prefix);
struct inet6_ifaddr *ipv6_get_ifaddr(struct net *net, const struct in6_addr *addr,
@@ -1523,7 +1521,7 @@ static int addrconf_ifid_arcnet(u8 *eui, struct net_device *dev)
if (dev->addr_len != ARCNET_ALEN)
return -1;
memset(eui, 0, 7);
- eui[7] = *(u8*)dev->dev_addr;
+ eui[7] = *(u8 *)dev->dev_addr;
return 0;
}
@@ -1668,7 +1666,8 @@ out:
in6_dev_put(idev);
}
-static int __ipv6_try_regen_rndid(struct inet6_dev *idev, struct in6_addr *tmpaddr) {
+static int __ipv6_try_regen_rndid(struct inet6_dev *idev, struct in6_addr *tmpaddr)
+{
int ret = 0;
if (tmpaddr && memcmp(idev->rndid, &tmpaddr->s6_addr[8], 8) == 0)
@@ -1911,7 +1910,7 @@ void addrconf_prefix_rcv(struct net_device *dev, u8 *opt, int len, bool sllao)
/* Try to figure out our local address for this prefix */
if (pinfo->autoconf && in6_dev->cnf.autoconf) {
- struct inet6_ifaddr * ifp;
+ struct inet6_ifaddr *ifp;
struct in6_addr addr;
int create = 0, update_lft = 0;
@@ -2365,9 +2364,9 @@ static void sit_add_v4_addrs(struct inet6_dev *idev)
}
for_each_netdev(net, dev) {
- struct in_device * in_dev = __in_dev_get_rtnl(dev);
+ struct in_device *in_dev = __in_dev_get_rtnl(dev);
if (in_dev && (dev->flags & IFF_UP)) {
- struct in_ifaddr * ifa;
+ struct in_ifaddr *ifa;
int flag = scope;
@@ -2413,7 +2412,7 @@ static void init_loopback(struct net_device *dev)
static void addrconf_add_linklocal(struct inet6_dev *idev, const struct in6_addr *addr)
{
- struct inet6_ifaddr * ifp;
+ struct inet6_ifaddr *ifp;
u32 addr_flags = IFA_F_PERMANENT;
#ifdef CONFIG_IPV6_OPTIMISTIC_DAD
@@ -2434,7 +2433,7 @@ static void addrconf_add_linklocal(struct inet6_dev *idev, const struct in6_addr
static void addrconf_dev_config(struct net_device *dev)
{
struct in6_addr addr;
- struct inet6_dev * idev;
+ struct inet6_dev *idev;
ASSERT_RTNL();
@@ -2570,7 +2569,7 @@ static void addrconf_ip6_tnl_config(struct net_device *dev)
}
static int addrconf_notify(struct notifier_block *this, unsigned long event,
- void * data)
+ void *data)
{
struct net_device *dev = (struct net_device *) data;
struct inet6_dev *idev = __in6_dev_get(dev);
@@ -3794,7 +3793,7 @@ static int inet6_dump_ifacaddr(struct sk_buff *skb, struct netlink_callback *cb)
return inet6_dump_addr(skb, cb, type);
}
-static int inet6_rtm_getaddr(struct sk_buff *in_skb, struct nlmsghdr* nlh,
+static int inet6_rtm_getaddr(struct sk_buff *in_skb, struct nlmsghdr *nlh,
void *arg)
{
struct net *net = sock_net(in_skb->sk);
--
1.7.9.5
^ permalink raw reply related
* [PATCH 2/8] net/ipv6/addrconf_core.c: Checkpatch cleanup
From: Eldad Zack @ 2012-04-01 17:49 UTC (permalink / raw)
To: David S. Miller, Alexey Kuznetsov, James Morris,
Hideaki YOSHIFUJI, Patrick McHardy
Cc: netdev, linux-kernel, Eldad Zack
In-Reply-To: <1333302548-9187-1-git-send-email-eldad@fogrefinery.com>
addrconf_core.c:13: ERROR: space required before the open parenthesis '('
Signed-off-by: Eldad Zack <eldad@fogrefinery.com>
---
net/ipv6/addrconf_core.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/net/ipv6/addrconf_core.c b/net/ipv6/addrconf_core.c
index 399287e..7981bde 100644
--- a/net/ipv6/addrconf_core.c
+++ b/net/ipv6/addrconf_core.c
@@ -10,7 +10,7 @@
static inline unsigned ipv6_addr_scope2type(unsigned scope)
{
- switch(scope) {
+ switch (scope) {
case IPV6_ADDR_SCOPE_NODELOCAL:
return (IPV6_ADDR_SCOPE_TYPE(IPV6_ADDR_SCOPE_NODELOCAL) |
IPV6_ADDR_LOOPBACK);
--
1.7.9.5
^ permalink raw reply related
* [PATCH 7/8] net/ipv6/icmp.c: Checkpatch cleanups
From: Eldad Zack @ 2012-04-01 17:49 UTC (permalink / raw)
To: David S. Miller, Alexey Kuznetsov, James Morris,
Hideaki YOSHIFUJI, Patrick McHardy
Cc: netdev, linux-kernel, Eldad Zack
In-Reply-To: <1333302548-9187-1-git-send-email-eldad@fogrefinery.com>
icmp.c:501: ERROR: "(foo*)" should be "(foo *)"
icmp.c:582: ERROR: "(foo*)" should be "(foo *)"
icmp.c:954: WARNING: EXPORT_SYMBOL(foo); should immediately follow its function/variable
Signed-off-by: Eldad Zack <eldad@fogrefinery.com>
---
net/ipv6/icmp.c | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/net/ipv6/icmp.c b/net/ipv6/icmp.c
index 27ac95a..cc079d8 100644
--- a/net/ipv6/icmp.c
+++ b/net/ipv6/icmp.c
@@ -498,7 +498,7 @@ void icmpv6_send(struct sk_buff *skb, u8 type, u8 code, __u32 info)
err = ip6_append_data(sk, icmpv6_getfrag, &msg,
len + sizeof(struct icmp6hdr),
sizeof(struct icmp6hdr), hlimit,
- np->tclass, NULL, &fl6, (struct rt6_info*)dst,
+ np->tclass, NULL, &fl6, (struct rt6_info *)dst,
MSG_DONTWAIT, np->dontfrag);
if (err) {
ICMP6_INC_STATS_BH(net, idev, ICMP6_MIB_OUTERRORS);
@@ -579,7 +579,7 @@ static void icmpv6_echo_reply(struct sk_buff *skb)
err = ip6_append_data(sk, icmpv6_getfrag, &msg, skb->len + sizeof(struct icmp6hdr),
sizeof(struct icmp6hdr), hlimit, np->tclass, NULL, &fl6,
- (struct rt6_info*)dst, MSG_DONTWAIT,
+ (struct rt6_info *)dst, MSG_DONTWAIT,
np->dontfrag);
if (err) {
@@ -950,7 +950,6 @@ int icmpv6_err_convert(u8 type, u8 code, int *err)
return fatal;
}
-
EXPORT_SYMBOL(icmpv6_err_convert);
#ifdef CONFIG_SYSCTL
--
1.7.9.5
^ permalink raw reply related
* Re: be2net: when can I expect roce support patch will be merged?
From: David Miller @ 2012-04-01 19:11 UTC (permalink / raw)
To: Parav.Pandit-iH1Dq9VlAzfQT0dZR+AlfA
Cc: netdev-u79uwXL29TY76Z2rM5mHXA, linux-rdma-u79uwXL29TY76Z2rM5mHXA
In-Reply-To: <88B766C272F2C64B944B21AD078333151C965B92D3-/SwythR3zqxVRK6PHKByhFaTQe2KTcn/@public.gmane.org>
From: <Parav.Pandit-iH1Dq9VlAzfQT0dZR+AlfA@public.gmane.org>
Date: Sun, 1 Apr 2012 01:36:50 -0700
> Did you get chance to merge below be2net patch for supporing RoCE driver?
> http://marc.info/?l=linux-rdma&m=133279326217836&w=2
The net-next tree isn't open, so you'll have to resubmit those
patches to netdev once it is.
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply
* Re: [PATCH] ipv6: fix array index in ip6_mc_add_src()
From: David Miller @ 2012-04-01 19:13 UTC (permalink / raw)
To: roy.qing.li; +Cc: netdev
In-Reply-To: <1333269926-24681-1-git-send-email-roy.qing.li@gmail.com>
From: roy.qing.li@gmail.com
Date: Sun, 1 Apr 2012 16:45:26 +0800
> From: RongQing.Li <roy.qing.li@gmail.com>
>
> Convert array index from the loop bound to the loop index.
>
> Signed-off-by: RongQing.Li <roy.qing.li@gmail.com>
That's not all you are doing:
> - (void) ip6_mc_del1_src(pmc, sfmode, &psfsrc[i]);
> + ip6_mc_del1_src(pmc, sfmode, &psfsrc[j]);
You absolutely MUST mention and explain this (void) removal.
It's probably there to elide an unchecked return value
warning from the compiler.
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox