* [ETH]: Combine format_addr() with print_mac(). @ 2007-12-21 22:05 Michael Chan 2007-12-21 22:36 ` Joe Perches 0 siblings, 1 reply; 6+ messages in thread From: Michael Chan @ 2007-12-21 22:05 UTC (permalink / raw) To: davem; +Cc: netdev, anilgv, joe, michaelc, david.somayajulu [ETH]: Combine format_addr() with print_mac(). print_mac() used by most net drivers and format_addr() used by net-sysfs.c are very similar and they can be integrated. format_addr() is also identically redefined in the qla4xxx iscsi driver. Export a new function format_mac_addr() to be used by net-sysfs, qla4xxx and others in the future. Both print_mac() and format_mac_addr() call _format_mac_addr() to do the formatting. Signed-off-by: Michael Chan <mchan@broadcom.com> Cc: Joe Perches <joe@perches.com> Cc: Mike Christie <michaelc@cs.wisc.edu> Cc: David Somayajulu <david.somayajulu@qlogic.com> diff --git a/drivers/scsi/qla4xxx/ql4_os.c b/drivers/scsi/qla4xxx/ql4_os.c index 89460d2..0f4562b 100644 --- a/drivers/scsi/qla4xxx/ql4_os.c +++ b/drivers/scsi/qla4xxx/ql4_os.c @@ -173,18 +173,6 @@ static void qla4xxx_conn_stop(struct iscsi_cls_conn *conn, int flag) printk(KERN_ERR "iscsi: invalid stop flag %d\n", flag); } -static ssize_t format_addr(char *buf, const unsigned char *addr, int len) -{ - int i; - char *cp = buf; - - for (i = 0; i < len; i++) - cp += sprintf(cp, "%02x%c", addr[i], - i == (len - 1) ? '\n' : ':'); - return cp - buf; -} - - static int qla4xxx_host_get_param(struct Scsi_Host *shost, enum iscsi_host_param param, char *buf) { @@ -193,7 +181,7 @@ static int qla4xxx_host_get_param(struct Scsi_Host *shost, switch (param) { case ISCSI_HOST_PARAM_HWADDRESS: - len = format_addr(buf, ha->my_mac, MAC_ADDR_LEN); + len = format_mac_addr(buf, ha->my_mac, MAC_ADDR_LEN); break; case ISCSI_HOST_PARAM_IPADDRESS: len = sprintf(buf, "%d.%d.%d.%d\n", ha->ip_address[0], diff --git a/include/linux/if_ether.h b/include/linux/if_ether.h index cc002cb..d20512c 100644 --- a/include/linux/if_ether.h +++ b/include/linux/if_ether.h @@ -124,10 +124,11 @@ int eth_header_parse(const struct sk_buff *skb, unsigned char *haddr); extern struct ctl_table ether_table[]; #endif +extern ssize_t format_mac_addr(char *buf, const unsigned char *addr, int len); + /* * Display a 6 byte device address (MAC) in a readable format. */ -#define MAC_FMT "%02x:%02x:%02x:%02x:%02x:%02x" extern char *print_mac(char *buf, const u8 *addr); #define DECLARE_MAC_BUF(var) char var[18] __maybe_unused diff --git a/net/core/net-sysfs.c b/net/core/net-sysfs.c index e41f4b9..e72993b 100644 --- a/net/core/net-sysfs.c +++ b/net/core/net-sysfs.c @@ -95,17 +95,6 @@ NETDEVICE_SHOW(type, fmt_dec); NETDEVICE_SHOW(link_mode, fmt_dec); /* use same locking rules as GIFHWADDR ioctl's */ -static ssize_t format_addr(char *buf, const unsigned char *addr, int len) -{ - int i; - char *cp = buf; - - for (i = 0; i < len; i++) - cp += sprintf(cp, "%02x%c", addr[i], - i == (len - 1) ? '\n' : ':'); - return cp - buf; -} - static ssize_t show_address(struct device *dev, struct device_attribute *attr, char *buf) { @@ -114,7 +103,7 @@ static ssize_t show_address(struct device *dev, struct device_attribute *attr, read_lock(&dev_base_lock); if (dev_isalive(net)) - ret = format_addr(buf, net->dev_addr, net->addr_len); + ret = format_mac_addr(buf, net->dev_addr, net->addr_len); read_unlock(&dev_base_lock); return ret; } @@ -124,7 +113,7 @@ static ssize_t show_broadcast(struct device *dev, { struct net_device *net = to_net_dev(dev); if (dev_isalive(net)) - return format_addr(buf, net->broadcast, net->addr_len); + return format_mac_addr(buf, net->broadcast, net->addr_len); return -EINVAL; } diff --git a/net/ethernet/eth.c b/net/ethernet/eth.c index 6b2e454..f760d41 100644 --- a/net/ethernet/eth.c +++ b/net/ethernet/eth.c @@ -359,10 +359,33 @@ struct net_device *alloc_etherdev_mq(int sizeof_priv, unsigned int queue_count) } EXPORT_SYMBOL(alloc_etherdev_mq); +static ssize_t _format_mac_addr(char *buf, const unsigned char *addr, int len) +{ + int i; + char *cp = buf; + + for (i = 0; i < len; i++) { + cp += sprintf(cp, "%02x", addr[i]); + if (i == len - 1) + break; + *cp++ = ':'; + } + return cp - buf; +} + +ssize_t format_mac_addr(char *buf, const unsigned char *addr, int len) +{ + ssize_t l; + + l = _format_mac_addr(buf, addr, len); + strcpy(buf + l, "\n"); + return l + 1; +} +EXPORT_SYMBOL(format_mac_addr); + char *print_mac(char *buf, const u8 *addr) { - sprintf(buf, MAC_FMT, - addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]); + _format_mac_addr(buf, addr, ETH_ALEN); return buf; } EXPORT_SYMBOL(print_mac); ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [ETH]: Combine format_addr() with print_mac(). 2007-12-21 22:05 [ETH]: Combine format_addr() with print_mac() Michael Chan @ 2007-12-21 22:36 ` Joe Perches 2007-12-22 3:58 ` Michael Chan 0 siblings, 1 reply; 6+ messages in thread From: Joe Perches @ 2007-12-21 22:36 UTC (permalink / raw) To: Michael Chan; +Cc: davem, netdev, anilgv, michaelc, david.somayajulu On Fri, 2007-12-21 at 14:05 -0800, Michael Chan wrote: > [ETH]: Combine format_addr() with print_mac(). > print_mac() used by most net drivers and format_addr() used by > net-sysfs.c are very similar and they can be integrated. > format_addr() is also identically redefined in the qla4xxx iscsi > driver. > diff --git a/net/ethernet/eth.c b/net/ethernet/eth.c > index 6b2e454..f760d41 100644 > --- a/net/ethernet/eth.c > +++ b/net/ethernet/eth.c > @@ -359,10 +359,33 @@ struct net_device *alloc_etherdev_mq(int sizeof_priv, unsigned int queue_count) > } > EXPORT_SYMBOL(alloc_etherdev_mq); > > +static ssize_t _format_mac_addr(char *buf, const unsigned char *addr, int len) > +{ > + int i; > + char *cp = buf; > + > + for (i = 0; i < len; i++) { > + cp += sprintf(cp, "%02x", addr[i]); > + if (i == len - 1) > + break; > + *cp++ = ':'; > + } > + return cp - buf; > +} > + > +ssize_t format_mac_addr(char *buf, const unsigned char *addr, int len) > +{ > + ssize_t l; > + > + l = _format_mac_addr(buf, addr, len); > + strcpy(buf + l, "\n"); > + return l + 1; > +} > +EXPORT_SYMBOL(format_mac_addr); > + > char *print_mac(char *buf, const u8 *addr) > { > - sprintf(buf, MAC_FMT, > - addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]); > + _format_mac_addr(buf, addr, ETH_ALEN); > return buf; > } > EXPORT_SYMBOL(print_mac); I think const unsigned char *addr should be const u8 *addr ssize_t? shouldn't it be size_t? Indexing buf by int len is unchecked. That could lead to unintended buffer overruns. Maybe add a buflen argument and use snprintf? I had a patch that added some type-safety to print_mac and prevented this unintended buffer overrun. It seems it wasn't applied. --------------------------------------- Subject: Re: [PATCH net-2.6.24] introduce MAC_FMT/MAC_ARG Date: Mon, 24 Sep 2007 10:28:36 -0700 Here is a patch that adds some type safety to print_mac by using a struct print_mac_buf * instead of char *. It also reduces the defconfig vmlinux size by 8 bytes. Signed-off-by: Joe Perches <joe@perches.com> -- include/linux/if_ether.h | 12 ++++++++++-- net/ethernet/eth.c | 6 +++--- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/include/linux/if_ether.h b/include/linux/if_ether.h index 57abca1..620d6b1 100644 --- a/include/linux/if_ether.h +++ b/include/linux/if_ether.h @@ -126,7 +126,15 @@ extern struct ctl_table ether_table[]; * Display a 6 byte device address (MAC) in a readable format. */ #define MAC_FMT "%02x:%02x:%02x:%02x:%02x:%02x" -extern char *print_mac(char *buf, const u8 *addr); -#define DECLARE_MAC_BUF(var) char var[18] __maybe_unused + +struct print_mac_buf { + char formatted_mac_addr[18]; +}; + +#define DECLARE_MAC_BUF(var) \ + struct print_mac_buf __maybe_unused _##var; \ + struct print_mac_buf __maybe_unused *var = &_##var + +extern char *print_mac(struct print_mac_buf *buf, const u8 *addr); #endif /* _LINUX_IF_ETHER_H */ diff --git a/net/ethernet/eth.c b/net/ethernet/eth.c index 2aaf6fa..ad82613 100644 --- a/net/ethernet/eth.c +++ b/net/ethernet/eth.c @@ -338,10 +338,10 @@ struct net_device *alloc_etherdev_mq(int sizeof_priv, unsigned int queue_count) } EXPORT_SYMBOL(alloc_etherdev_mq); -char *print_mac(char *buf, const u8 *addr) +char *print_mac(struct print_mac_buf *buf, const u8 *addr) { - sprintf(buf, MAC_FMT, + sprintf(buf->formatted_mac_addr, MAC_FMT, addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]); - return buf; + return buf->formatted_mac_addr; } EXPORT_SYMBOL(print_mac); ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [ETH]: Combine format_addr() with print_mac(). 2007-12-21 22:36 ` Joe Perches @ 2007-12-22 3:58 ` Michael Chan 2007-12-22 7:02 ` Joe Perches 0 siblings, 1 reply; 6+ messages in thread From: Michael Chan @ 2007-12-22 3:58 UTC (permalink / raw) To: Joe Perches; +Cc: David Miller, netdev, anilgv, michaelc, david.somayajulu On Fri, 2007-12-21 at 14:36 -0800, Joe Perches wrote: > On Fri, 2007-12-21 at 14:05 -0800, Michael Chan wrote: > > diff --git a/net/ethernet/eth.c b/net/ethernet/eth.c > > index 6b2e454..f760d41 100644 > > --- a/net/ethernet/eth.c > > +++ b/net/ethernet/eth.c > > @@ -359,10 +359,33 @@ struct net_device *alloc_etherdev_mq(int sizeof_priv, unsigned int queue_count) > > } > > EXPORT_SYMBOL(alloc_etherdev_mq); > > > > +static ssize_t _format_mac_addr(char *buf, const unsigned char *addr, int len) > > +{ > > + int i; > > + char *cp = buf; > > + > > + for (i = 0; i < len; i++) { > > + cp += sprintf(cp, "%02x", addr[i]); > > + if (i == len - 1) > > + break; > > + *cp++ = ':'; > > + } > > + return cp - buf; > > +} > > + > > +ssize_t format_mac_addr(char *buf, const unsigned char *addr, int len) > > +{ > > + ssize_t l; > > + > > + l = _format_mac_addr(buf, addr, len); > > + strcpy(buf + l, "\n"); > > + return l + 1; > > +} > > +EXPORT_SYMBOL(format_mac_addr); > > + > > char *print_mac(char *buf, const u8 *addr) > > { > > - sprintf(buf, MAC_FMT, > > - addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]); > > + _format_mac_addr(buf, addr, ETH_ALEN); > > return buf; > > } > > EXPORT_SYMBOL(print_mac); > > I think const unsigned char *addr should be const u8 *addr The dev_addr is declared as unsigned char* in struct net_device. To be consistent, can we change print_mac() and MAC_BUF to use unsigned char*? They are really the same. > ssize_t? shouldn't it be size_t? I'm just keeping the prototype unchanged as originally defined in net- sysfs.c > Indexing buf by int len is unchecked. > That could lead to unintended buffer overruns. > Maybe add a buflen argument and use snprintf? Again, I kept the semantics the same as the original, but will be happy to add a buflen for better checking. > > I had a patch that added some type-safety to print_mac > and prevented this unintended buffer overrun. > > It seems it wasn't applied. > > --------------------------------------- > > Subject: Re: [PATCH net-2.6.24] introduce MAC_FMT/MAC_ARG > Date: Mon, 24 Sep 2007 10:28:36 -0700 > > Here is a patch that adds some type safety to print_mac > by using a struct print_mac_buf * instead of char *. > > It also reduces the defconfig vmlinux size by 8 bytes. > > Signed-off-by: Joe Perches <joe@perches.com> > > -- > > include/linux/if_ether.h | 12 ++++++++++-- > net/ethernet/eth.c | 6 +++--- > 2 files changed, 13 insertions(+), 5 deletions(-) > > diff --git a/include/linux/if_ether.h b/include/linux/if_ether.h > index 57abca1..620d6b1 100644 > --- a/include/linux/if_ether.h > +++ b/include/linux/if_ether.h > @@ -126,7 +126,15 @@ extern struct ctl_table ether_table[]; > * Display a 6 byte device address (MAC) in a readable format. > */ > #define MAC_FMT "%02x:%02x:%02x:%02x:%02x:%02x" > -extern char *print_mac(char *buf, const u8 *addr); > -#define DECLARE_MAC_BUF(var) char var[18] __maybe_unused > + > +struct print_mac_buf { > + char formatted_mac_addr[18]; > +}; > + > +#define DECLARE_MAC_BUF(var) \ > + struct print_mac_buf __maybe_unused _##var; \ > + struct print_mac_buf __maybe_unused *var = &_##var > + > +extern char *print_mac(struct print_mac_buf *buf, const u8 *addr); > > #endif /* _LINUX_IF_ETHER_H */ > diff --git a/net/ethernet/eth.c b/net/ethernet/eth.c > index 2aaf6fa..ad82613 100644 > --- a/net/ethernet/eth.c > +++ b/net/ethernet/eth.c > @@ -338,10 +338,10 @@ struct net_device *alloc_etherdev_mq(int > sizeof_priv, unsigned int queue_count) > } > EXPORT_SYMBOL(alloc_etherdev_mq); > > -char *print_mac(char *buf, const u8 *addr) > +char *print_mac(struct print_mac_buf *buf, const u8 *addr) > { > - sprintf(buf, MAC_FMT, > + sprintf(buf->formatted_mac_addr, MAC_FMT, > addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]); > - return buf; > + return buf->formatted_mac_addr; > } > EXPORT_SYMBOL(print_mac); > > > > ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [ETH]: Combine format_addr() with print_mac(). 2007-12-22 3:58 ` Michael Chan @ 2007-12-22 7:02 ` Joe Perches 2007-12-24 0:20 ` Michael Chan 0 siblings, 1 reply; 6+ messages in thread From: Joe Perches @ 2007-12-22 7:02 UTC (permalink / raw) To: Michael Chan; +Cc: David Miller, netdev, anilgv, michaelc, david.somayajulu On Fri, 2007-12-21 at 19:58 -0800, Michael Chan wrote: > The dev_addr is declared as unsigned char* in struct net_device. To be > consistent, can we change print_mac() and MAC_BUF to use unsigned char*? > They are really the same. That's fine by me. I like consistency. I don't remember why it was u8 and not unsigned char. > > ssize_t? shouldn't it be size_t? > I'm just keeping the prototype unchanged as originally defined in net- > sysfs.c It's painless to change the prototype. size_t seems more sensible. > > Indexing buf by int len is unchecked. > > That could lead to unintended buffer overruns. > > Maybe add a buflen argument and use snprintf? > Again, I kept the semantics the same as the original, but will be happy > to add a buflen for better checking. That sounds good. cheers, Joe ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [ETH]: Combine format_addr() with print_mac(). 2007-12-22 7:02 ` Joe Perches @ 2007-12-24 0:20 ` Michael Chan 2007-12-25 5:28 ` David Miller 0 siblings, 1 reply; 6+ messages in thread From: Michael Chan @ 2007-12-24 0:20 UTC (permalink / raw) To: Joe Perches; +Cc: David Miller, netdev, anilgv, michaelc, david.somayajulu On Fri, 2007-12-21 at 23:02 -0800, Joe Perches wrote: > On Fri, 2007-12-21 at 19:58 -0800, Michael Chan wrote: > > > ssize_t? shouldn't it be size_t? > > I'm just keeping the prototype unchanged as originally defined in net- > > sysfs.c > > It's painless to change the prototype. > size_t seems more sensible. > I'll change the internal function to use size_t, but the exported function for sysfs use will be ssize_t since sysfs uses ssize_t. Here's the revised patch: [ETH]: Combine format_addr() with print_mac(). print_mac() used many most net drivers and format_addr() used by net-sysfs.c are very similar and they can be intergrated. format_addr() is also identically redefined in the qla4xxx iscsi driver. Export a new function sysfs_format_mac() to be used by net-sysfs, qla4xxx and others in the future. Both print_mac() and sysfs_format_mac() call _format_mac_addr() to do the formatting. Changed print_mac() to use unsigned char * to be consistent with net_device struct's dev_addr. Added buffer length overrun checking as suggested by Joe Perches. Signed-off-by: Michael Chan <mchan@broadcom.com> Cc: Joe Perches <joe@perches.com> Cc: Mike Christie <michaelc@cs.wisc.edu> Cc: David Somayajulu <david.somayajulu@qlogic.com> diff --git a/drivers/scsi/qla4xxx/ql4_os.c b/drivers/scsi/qla4xxx/ql4_os.c index 89460d2..4e9cf18 100644 --- a/drivers/scsi/qla4xxx/ql4_os.c +++ b/drivers/scsi/qla4xxx/ql4_os.c @@ -173,18 +173,6 @@ static void qla4xxx_conn_stop(struct iscsi_cls_conn *conn, int flag) printk(KERN_ERR "iscsi: invalid stop flag %d\n", flag); } -static ssize_t format_addr(char *buf, const unsigned char *addr, int len) -{ - int i; - char *cp = buf; - - for (i = 0; i < len; i++) - cp += sprintf(cp, "%02x%c", addr[i], - i == (len - 1) ? '\n' : ':'); - return cp - buf; -} - - static int qla4xxx_host_get_param(struct Scsi_Host *shost, enum iscsi_host_param param, char *buf) { @@ -193,7 +181,7 @@ static int qla4xxx_host_get_param(struct Scsi_Host *shost, switch (param) { case ISCSI_HOST_PARAM_HWADDRESS: - len = format_addr(buf, ha->my_mac, MAC_ADDR_LEN); + len = sysfs_format_mac(buf, ha->my_mac, MAC_ADDR_LEN); break; case ISCSI_HOST_PARAM_IPADDRESS: len = sprintf(buf, "%d.%d.%d.%d\n", ha->ip_address[0], diff --git a/include/linux/if_ether.h b/include/linux/if_ether.h index cc002cb..7a1e011 100644 --- a/include/linux/if_ether.h +++ b/include/linux/if_ether.h @@ -124,12 +124,14 @@ int eth_header_parse(const struct sk_buff *skb, unsigned char *haddr); extern struct ctl_table ether_table[]; #endif +extern ssize_t sysfs_format_mac(char *buf, const unsigned char *addr, int len); + /* * Display a 6 byte device address (MAC) in a readable format. */ -#define MAC_FMT "%02x:%02x:%02x:%02x:%02x:%02x" -extern char *print_mac(char *buf, const u8 *addr); -#define DECLARE_MAC_BUF(var) char var[18] __maybe_unused +extern char *print_mac(char *buf, const unsigned char *addr); +#define MAC_BUF_SIZE 18 +#define DECLARE_MAC_BUF(var) char var[MAC_BUF_SIZE] __maybe_unused #endif diff --git a/net/core/net-sysfs.c b/net/core/net-sysfs.c index e41f4b9..7635d3f 100644 --- a/net/core/net-sysfs.c +++ b/net/core/net-sysfs.c @@ -95,17 +95,6 @@ NETDEVICE_SHOW(type, fmt_dec); NETDEVICE_SHOW(link_mode, fmt_dec); /* use same locking rules as GIFHWADDR ioctl's */ -static ssize_t format_addr(char *buf, const unsigned char *addr, int len) -{ - int i; - char *cp = buf; - - for (i = 0; i < len; i++) - cp += sprintf(cp, "%02x%c", addr[i], - i == (len - 1) ? '\n' : ':'); - return cp - buf; -} - static ssize_t show_address(struct device *dev, struct device_attribute *attr, char *buf) { @@ -114,7 +103,7 @@ static ssize_t show_address(struct device *dev, struct device_attribute *attr, read_lock(&dev_base_lock); if (dev_isalive(net)) - ret = format_addr(buf, net->dev_addr, net->addr_len); + ret = sysfs_format_mac(buf, net->dev_addr, net->addr_len); read_unlock(&dev_base_lock); return ret; } @@ -124,7 +113,7 @@ static ssize_t show_broadcast(struct device *dev, { struct net_device *net = to_net_dev(dev); if (dev_isalive(net)) - return format_addr(buf, net->broadcast, net->addr_len); + return sysfs_format_mac(buf, net->broadcast, net->addr_len); return -EINVAL; } diff --git a/net/ethernet/eth.c b/net/ethernet/eth.c index 6b2e454..a7b4175 100644 --- a/net/ethernet/eth.c +++ b/net/ethernet/eth.c @@ -359,10 +359,34 @@ struct net_device *alloc_etherdev_mq(int sizeof_priv, unsigned int queue_count) } EXPORT_SYMBOL(alloc_etherdev_mq); -char *print_mac(char *buf, const u8 *addr) +static size_t _format_mac_addr(char *buf, int buflen, + const unsigned char *addr, int len) { - sprintf(buf, MAC_FMT, - addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]); + int i; + char *cp = buf; + + for (i = 0; i < len; i++) { + cp += scnprintf(cp, buflen - (cp - buf), "%02x", addr[i]); + if (i == len - 1) + break; + cp += strlcpy(cp, ":", buflen - (cp - buf)); + } + return cp - buf; +} + +ssize_t sysfs_format_mac(char *buf, const unsigned char *addr, int len) +{ + size_t l; + + l = _format_mac_addr(buf, PAGE_SIZE, addr, len); + l += strlcpy(buf + l, "\n", PAGE_SIZE - l); + return ((ssize_t) l); +} +EXPORT_SYMBOL(sysfs_format_mac); + +char *print_mac(char *buf, const unsigned char *addr) +{ + _format_mac_addr(buf, MAC_BUF_SIZE, addr, ETH_ALEN); return buf; } EXPORT_SYMBOL(print_mac); ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [ETH]: Combine format_addr() with print_mac(). 2007-12-24 0:20 ` Michael Chan @ 2007-12-25 5:28 ` David Miller 0 siblings, 0 replies; 6+ messages in thread From: David Miller @ 2007-12-25 5:28 UTC (permalink / raw) To: mchan; +Cc: joe, netdev, anilgv, michaelc, david.somayajulu From: "Michael Chan" <mchan@broadcom.com> Date: Sun, 23 Dec 2007 16:20:35 -0800 > Here's the revised patch: > > [ETH]: Combine format_addr() with print_mac(). > > print_mac() used many most net drivers and format_addr() used by > net-sysfs.c are very similar and they can be intergrated. > > format_addr() is also identically redefined in the qla4xxx iscsi > driver. > > Export a new function sysfs_format_mac() to be used by net-sysfs, > qla4xxx and others in the future. Both print_mac() and > sysfs_format_mac() call _format_mac_addr() to do the formatting. > > Changed print_mac() to use unsigned char * to be consistent with > net_device struct's dev_addr. Added buffer length overrun checking > as suggested by Joe Perches. > > Signed-off-by: Michael Chan <mchan@broadcom.com> Applied to net-2.6.25, thanks Michael. ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2007-12-25 5:28 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2007-12-21 22:05 [ETH]: Combine format_addr() with print_mac() Michael Chan 2007-12-21 22:36 ` Joe Perches 2007-12-22 3:58 ` Michael Chan 2007-12-22 7:02 ` Joe Perches 2007-12-24 0:20 ` Michael Chan 2007-12-25 5:28 ` David Miller
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).