forked from Minki/linux
linux-can-fixes-for-4.9-20161031
-----BEGIN PGP SIGNATURE----- iQEwBAABCgAaBQJYF6ANExxta2xAcGVuZ3V0cm9uaXguZGUACgkQPTuqJaypJWqQ DAf+JRm7uhjaXEgITIhgiGIZBmCce7ONSBmBRr6cKcQyzMPaAHjfEZMcR5pltvH1 z03bspu5oug3bfSxk4iYK9hNxxAV+URxFxBDbOMdnolAsl6ZBcpOkx2jj/JFByZ5 fmOk8ChQr28qteEMLcTlm6O188eq2fZ+GUVZOh9iRslSVVcvGrM90NQoPFMUfP7G On9+rZzSZlyNvdCSdFwrjUDzMVEW77P1Hv3gG10koefgIZKLelmMOIwDg7EvGTon 7HjqdZs6MFoSFAcbzJHB9lN0pAtK8nxWd3SPhdQof3kca8Dff/si4r5ZB2gAdSBq w17LfdWoVE4p5/XvSyM4SM/X9A== =Per+ -----END PGP SIGNATURE----- Merge tag 'linux-can-fixes-for-4.9-20161031' of git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can Marc Kleine-Budde says: ==================== pull-request: can 2016-10-31 this is a pull request of two patches for the upcoming v4.9 release. The first patch is by Lukas Resch for the sja1000 plx_pci driver that adds support for Moxa CAN devices. The second patch is by Oliver Hartkopp and fixes a potential kernel panic in the CAN broadcast manager. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
2c8657d226
@ -142,6 +142,9 @@ struct plx_pci_card {
|
||||
#define CTI_PCI_VENDOR_ID 0x12c4
|
||||
#define CTI_PCI_DEVICE_ID_CRG001 0x0900
|
||||
|
||||
#define MOXA_PCI_VENDOR_ID 0x1393
|
||||
#define MOXA_PCI_DEVICE_ID 0x0100
|
||||
|
||||
static void plx_pci_reset_common(struct pci_dev *pdev);
|
||||
static void plx9056_pci_reset_common(struct pci_dev *pdev);
|
||||
static void plx_pci_reset_marathon_pci(struct pci_dev *pdev);
|
||||
@ -258,6 +261,14 @@ static struct plx_pci_card_info plx_pci_card_info_elcus = {
|
||||
/* based on PLX9030 */
|
||||
};
|
||||
|
||||
static struct plx_pci_card_info plx_pci_card_info_moxa = {
|
||||
"MOXA", 2,
|
||||
PLX_PCI_CAN_CLOCK, PLX_PCI_OCR, PLX_PCI_CDR,
|
||||
{0, 0x00, 0x00}, { {0, 0x00, 0x80}, {1, 0x00, 0x80} },
|
||||
&plx_pci_reset_common
|
||||
/* based on PLX9052 */
|
||||
};
|
||||
|
||||
static const struct pci_device_id plx_pci_tbl[] = {
|
||||
{
|
||||
/* Adlink PCI-7841/cPCI-7841 */
|
||||
@ -357,6 +368,13 @@ static const struct pci_device_id plx_pci_tbl[] = {
|
||||
0, 0,
|
||||
(kernel_ulong_t)&plx_pci_card_info_elcus
|
||||
},
|
||||
{
|
||||
/* moxa */
|
||||
MOXA_PCI_VENDOR_ID, MOXA_PCI_DEVICE_ID,
|
||||
PCI_ANY_ID, PCI_ANY_ID,
|
||||
0, 0,
|
||||
(kernel_ulong_t)&plx_pci_card_info_moxa
|
||||
},
|
||||
{ 0,}
|
||||
};
|
||||
MODULE_DEVICE_TABLE(pci, plx_pci_tbl);
|
||||
|
@ -1549,24 +1549,31 @@ static int bcm_connect(struct socket *sock, struct sockaddr *uaddr, int len,
|
||||
struct sockaddr_can *addr = (struct sockaddr_can *)uaddr;
|
||||
struct sock *sk = sock->sk;
|
||||
struct bcm_sock *bo = bcm_sk(sk);
|
||||
int ret = 0;
|
||||
|
||||
if (len < sizeof(*addr))
|
||||
return -EINVAL;
|
||||
|
||||
if (bo->bound)
|
||||
return -EISCONN;
|
||||
lock_sock(sk);
|
||||
|
||||
if (bo->bound) {
|
||||
ret = -EISCONN;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
/* bind a device to this socket */
|
||||
if (addr->can_ifindex) {
|
||||
struct net_device *dev;
|
||||
|
||||
dev = dev_get_by_index(&init_net, addr->can_ifindex);
|
||||
if (!dev)
|
||||
return -ENODEV;
|
||||
|
||||
if (!dev) {
|
||||
ret = -ENODEV;
|
||||
goto fail;
|
||||
}
|
||||
if (dev->type != ARPHRD_CAN) {
|
||||
dev_put(dev);
|
||||
return -ENODEV;
|
||||
ret = -ENODEV;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
bo->ifindex = dev->ifindex;
|
||||
@ -1577,17 +1584,24 @@ static int bcm_connect(struct socket *sock, struct sockaddr *uaddr, int len,
|
||||
bo->ifindex = 0;
|
||||
}
|
||||
|
||||
bo->bound = 1;
|
||||
|
||||
if (proc_dir) {
|
||||
/* unique socket address as filename */
|
||||
sprintf(bo->procname, "%lu", sock_i_ino(sk));
|
||||
bo->bcm_proc_read = proc_create_data(bo->procname, 0644,
|
||||
proc_dir,
|
||||
&bcm_proc_fops, sk);
|
||||
if (!bo->bcm_proc_read) {
|
||||
ret = -ENOMEM;
|
||||
goto fail;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
bo->bound = 1;
|
||||
|
||||
fail:
|
||||
release_sock(sk);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int bcm_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
|
||||
|
Loading…
Reference in New Issue
Block a user