Magellan Linux

Annotation of /trunk/kernel26-alx/patches-2.6.27-r3/0135-2.6.27.36-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1176 - (hide annotations) (download)
Thu Oct 14 15:11:06 2010 UTC (13 years, 7 months ago) by niro
File size: 7232 byte(s)
-2.6.27-alx-r3: new magellan 0.5.2 kernel
1 niro 1176 diff --git a/drivers/isdn/gigaset/bas-gigaset.c b/drivers/isdn/gigaset/bas-gigaset.c
2     index fcec2df..3990eae 100644
3     --- a/drivers/isdn/gigaset/bas-gigaset.c
4     +++ b/drivers/isdn/gigaset/bas-gigaset.c
5     @@ -2140,8 +2140,16 @@ static int gigaset_initcshw(struct cardstate *cs)
6     struct bas_cardstate *ucs;
7    
8     cs->hw.bas = ucs = kmalloc(sizeof *ucs, GFP_KERNEL);
9     - if (!ucs)
10     + if (!ucs) {
11     + pr_err("out of memory\n");
12     + return 0;
13     + }
14     + ucs->int_in_buf = kmalloc(IP_MSGSIZE, GFP_KERNEL);
15     + if (!ucs->int_in_buf) {
16     + kfree(ucs);
17     + pr_err("out of memory\n");
18     return 0;
19     + }
20    
21     ucs->urb_cmd_in = NULL;
22     ucs->urb_cmd_out = NULL;
23     @@ -2236,12 +2244,6 @@ static int gigaset_probe(struct usb_interface *interface,
24     }
25     hostif = interface->cur_altsetting;
26     }
27     - ucs->int_in_buf = kmalloc(IP_MSGSIZE, GFP_KERNEL);
28     - if (!ucs->int_in_buf) {
29     - kfree(ucs);
30     - pr_err("out of memory\n");
31     - return 0;
32     - }
33    
34     /* Reject application specific interfaces
35     */
36     diff --git a/drivers/net/enc28j60.c b/drivers/net/enc28j60.c
37     index aa0bf6e..49fc60d 100644
38     --- a/drivers/net/enc28j60.c
39     +++ b/drivers/net/enc28j60.c
40     @@ -919,7 +919,7 @@ static void enc28j60_hw_rx(struct net_device *ndev)
41     if (netif_msg_rx_status(priv))
42     enc28j60_dump_rsv(priv, __FUNCTION__, next_packet, len, rxstat);
43    
44     - if (!RSV_GETBIT(rxstat, RSV_RXOK)) {
45     + if (!RSV_GETBIT(rxstat, RSV_RXOK) || len > MAX_FRAMELEN) {
46     if (netif_msg_rx_err(priv))
47     dev_err(&ndev->dev, "Rx Error (%04x)\n", rxstat);
48     ndev->stats.rx_errors++;
49     @@ -927,6 +927,8 @@ static void enc28j60_hw_rx(struct net_device *ndev)
50     ndev->stats.rx_crc_errors++;
51     if (RSV_GETBIT(rxstat, RSV_LENCHECKERR))
52     ndev->stats.rx_frame_errors++;
53     + if (len > MAX_FRAMELEN)
54     + ndev->stats.rx_over_errors++;
55     } else {
56     skb = dev_alloc_skb(len + NET_IP_ALIGN);
57     if (!skb) {
58     diff --git a/drivers/net/pcmcia/pcnet_cs.c b/drivers/net/pcmcia/pcnet_cs.c
59     index 7d6cf02..b429a0f 100644
60     --- a/drivers/net/pcmcia/pcnet_cs.c
61     +++ b/drivers/net/pcmcia/pcnet_cs.c
62     @@ -591,7 +591,7 @@ static int pcnet_config(struct pcmcia_device *link)
63     }
64    
65     if ((link->conf.ConfigBase == 0x03c0)
66     - && (link->manf_id == 0x149) && (link->card_id = 0xc1ab)) {
67     + && (link->manf_id == 0x149) && (link->card_id == 0xc1ab)) {
68     printk(KERN_INFO "pcnet_cs: this is an AX88190 card!\n");
69     printk(KERN_INFO "pcnet_cs: use axnet_cs instead.\n");
70     goto failed;
71     diff --git a/drivers/net/wireless/p54/p54usb.c b/drivers/net/wireless/p54/p54usb.c
72     index bfff6b5..b97a1c9 100644
73     --- a/drivers/net/wireless/p54/p54usb.c
74     +++ b/drivers/net/wireless/p54/p54usb.c
75     @@ -63,6 +63,7 @@ static struct usb_device_id p54u_table[] __devinitdata = {
76     {USB_DEVICE(0x0bf8, 0x1009)}, /* FUJITSU E-5400 USB D1700*/
77     {USB_DEVICE(0x0cde, 0x0006)}, /* Medion MD40900 */
78     {USB_DEVICE(0x0cde, 0x0008)}, /* Sagem XG703A */
79     + {USB_DEVICE(0x0cde, 0x0015)}, /* Zcomax XG-705A */
80     {USB_DEVICE(0x0d8e, 0x3762)}, /* DLink DWL-G120 Cohiba */
81     {USB_DEVICE(0x09aa, 0x1000)}, /* Spinnaker Proto board */
82     {USB_DEVICE(0x124a, 0x4025)}, /* IOGear GWU513 (GW3887IK chip) */
83     diff --git a/fs/inode.c b/fs/inode.c
84     index 7b2acc1..79777d9 100644
85     --- a/fs/inode.c
86     +++ b/fs/inode.c
87     @@ -590,13 +590,15 @@ void unlock_new_inode(struct inode *inode)
88     }
89     #endif
90     /*
91     - * This is special! We do not need the spinlock
92     - * when clearing I_LOCK, because we're guaranteed
93     - * that nobody else tries to do anything about the
94     - * state of the inode when it is locked, as we
95     - * just created it (so there can be no old holders
96     - * that haven't tested I_LOCK).
97     + * This is special! We do not need the spinlock when clearing I_LOCK,
98     + * because we're guaranteed that nobody else tries to do anything about
99     + * the state of the inode when it is locked, as we just created it (so
100     + * there can be no old holders that haven't tested I_LOCK).
101     + * However we must emit the memory barrier so that other CPUs reliably
102     + * see the clearing of I_LOCK after the other inode initialisation has
103     + * completed.
104     */
105     + smp_mb();
106     WARN_ON((inode->i_state & (I_LOCK|I_NEW)) != (I_LOCK|I_NEW));
107     inode->i_state &= ~(I_LOCK|I_NEW);
108     wake_up_inode(inode);
109     diff --git a/mm/hugetlb.c b/mm/hugetlb.c
110     index 2885674..3a08c5a 100644
111     --- a/mm/hugetlb.c
112     +++ b/mm/hugetlb.c
113     @@ -983,6 +983,7 @@ __attribute__((weak)) int alloc_bootmem_huge_page(struct hstate *h)
114     NODE_DATA(h->hugetlb_next_nid),
115     huge_page_size(h), huge_page_size(h), 0);
116    
117     + hstate_next_node(h);
118     if (addr) {
119     /*
120     * Use the beginning of the huge page to store the
121     @@ -993,7 +994,6 @@ __attribute__((weak)) int alloc_bootmem_huge_page(struct hstate *h)
122     if (m)
123     goto found;
124     }
125     - hstate_next_node(h);
126     nr_nodes--;
127     }
128     return 0;
129     diff --git a/mm/memory.c b/mm/memory.c
130     index 3856c36..1300b70 100644
131     --- a/mm/memory.c
132     +++ b/mm/memory.c
133     @@ -2422,7 +2422,8 @@ static int do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma,
134     goto oom_free_page;
135    
136     entry = mk_pte(page, vma->vm_page_prot);
137     - entry = maybe_mkwrite(pte_mkdirty(entry), vma);
138     + if (vma->vm_flags & VM_WRITE)
139     + entry = pte_mkwrite(pte_mkdirty(entry));
140    
141     page_table = pte_offset_map_lock(mm, pmd, address, &ptl);
142     if (!pte_none(*page_table))
143     diff --git a/mm/mmap.c b/mm/mmap.c
144     index d330758..8b5aa8e 100644
145     --- a/mm/mmap.c
146     +++ b/mm/mmap.c
147     @@ -575,9 +575,9 @@ again: remove_next = 1 + (end > next->vm_end);
148    
149     /*
150     * When changing only vma->vm_end, we don't really need
151     - * anon_vma lock: but is that case worth optimizing out?
152     + * anon_vma lock.
153     */
154     - if (vma->anon_vma)
155     + if (vma->anon_vma && (insert || importer || start != vma->vm_start))
156     anon_vma = vma->anon_vma;
157     if (anon_vma) {
158     spin_lock(&anon_vma->lock);
159     diff --git a/net/ax25/af_ax25.c b/net/ax25/af_ax25.c
160     index 28c7157..cd9d526 100644
161     --- a/net/ax25/af_ax25.c
162     +++ b/net/ax25/af_ax25.c
163     @@ -539,7 +539,7 @@ static int ax25_setsockopt(struct socket *sock, int level, int optname,
164     if (level != SOL_AX25)
165     return -ENOPROTOOPT;
166    
167     - if (optlen < sizeof(int))
168     + if (optlen < (int)sizeof(int))
169     return -EINVAL;
170    
171     if (get_user(opt, (int __user *)optval))
172     diff --git a/net/bridge/br_netfilter.c b/net/bridge/br_netfilter.c
173     index 9abd450..f908d68 100644
174     --- a/net/bridge/br_netfilter.c
175     +++ b/net/bridge/br_netfilter.c
176     @@ -358,7 +358,7 @@ static int br_nf_pre_routing_finish(struct sk_buff *skb)
177     },
178     .proto = 0,
179     };
180     - struct in_device *in_dev = in_dev_get(dev);
181     + struct in_device *in_dev = __in_dev_get_rcu(dev);
182    
183     /* If err equals -EHOSTUNREACH the error is due to a
184     * martian destination or due to the fact that
185     diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
186     index 4b50878..ade1ebd 100644
187     --- a/net/packet/af_packet.c
188     +++ b/net/packet/af_packet.c
189     @@ -1500,7 +1500,7 @@ packet_setsockopt(struct socket *sock, int level, int optname, char __user *optv
190     static int packet_getsockopt(struct socket *sock, int level, int optname,
191     char __user *optval, int __user *optlen)
192     {
193     - int len;
194     + unsigned int len;
195     int val;
196     struct sock *sk = sock->sk;
197     struct packet_sock *po = pkt_sk(sk);
198     @@ -1513,7 +1513,7 @@ static int packet_getsockopt(struct socket *sock, int level, int optname,
199     if (get_user(len, optlen))
200     return -EFAULT;
201    
202     - if (len < 0)
203     + if ((int)len < 0)
204     return -EINVAL;
205    
206     switch(optname) {