Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
a77e4c96
Commit
a77e4c96
authored
Feb 26, 2005
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
bk://bart.bkbits.net/ide-2.6
into ppc970.osdl.org:/home/torvalds/v2.6/linux
parents
f18e6d3e
8ad4c604
Changes
24
Hide whitespace changes
Inline
Side-by-side
Showing
24 changed files
with
200 additions
and
76 deletions
+200
-76
arch/arm/mm/consistent.c
arch/arm/mm/consistent.c
+2
-1
arch/i386/kernel/apic.c
arch/i386/kernel/apic.c
+2
-2
arch/ppc64/mm/tlb.c
arch/ppc64/mm/tlb.c
+6
-2
drivers/block/cfq-iosched.c
drivers/block/cfq-iosched.c
+1
-1
drivers/char/keyboard.c
drivers/char/keyboard.c
+2
-0
drivers/char/pty.c
drivers/char/pty.c
+4
-2
drivers/parport/parport_pc.c
drivers/parport/parport_pc.c
+1
-1
drivers/scsi/scsi_devinfo.c
drivers/scsi/scsi_devinfo.c
+1
-1
drivers/usb/class/cdc-acm.c
drivers/usb/class/cdc-acm.c
+4
-4
drivers/usb/core/devio.c
drivers/usb/core/devio.c
+1
-1
drivers/video/modedb.c
drivers/video/modedb.c
+1
-1
fs/binfmt_elf.c
fs/binfmt_elf.c
+8
-7
include/linux/sysctl.h
include/linux/sysctl.h
+3
-0
include/net/ipv6.h
include/net/ipv6.h
+2
-0
kernel/sysctl.c
kernel/sysctl.c
+91
-0
net/core/pktgen.c
net/core/pktgen.c
+19
-27
net/ipv4/netfilter/ip_conntrack_standalone.c
net/ipv4/netfilter/ip_conntrack_standalone.c
+2
-0
net/ipv4/netfilter/ipt_hashlimit.c
net/ipv4/netfilter/ipt_hashlimit.c
+10
-0
net/ipv4/route.c
net/ipv4/route.c
+3
-3
net/ipv6/addrconf.c
net/ipv6/addrconf.c
+15
-1
net/ipv6/af_inet6.c
net/ipv6/af_inet6.c
+4
-2
net/ipv6/proc.c
net/ipv6/proc.c
+16
-18
security/keys/compat.c
security/keys/compat.c
+1
-1
security/keys/keyctl.c
security/keys/keyctl.c
+1
-1
No files found.
arch/arm/mm/consistent.c
View file @
a77e4c96
...
@@ -293,7 +293,8 @@ static int dma_mmap(struct device *dev, struct vm_area_struct *vma,
...
@@ -293,7 +293,8 @@ static int dma_mmap(struct device *dev, struct vm_area_struct *vma,
vma
->
vm_flags
|=
VM_RESERVED
;
vma
->
vm_flags
|=
VM_RESERVED
;
ret
=
remap_pfn_range
(
vma
,
vma
->
vm_start
,
ret
=
remap_pfn_range
(
vma
,
vma
->
vm_start
,
page_to_pfn
(
c
->
vm_pages
)
+
off
,
page_to_pfn
(
c
->
vm_pages
)
+
off
,
user_size
,
vma
->
vm_page_prot
);
user_size
<<
PAGE_SHIFT
,
vma
->
vm_page_prot
);
}
}
}
}
...
...
arch/i386/kernel/apic.c
View file @
a77e4c96
...
@@ -894,7 +894,7 @@ static void __init wait_8254_wraparound(void)
...
@@ -894,7 +894,7 @@ static void __init wait_8254_wraparound(void)
* Default initialization for 8254 timers. If we use other timers like HPET,
* Default initialization for 8254 timers. If we use other timers like HPET,
* we override this later
* we override this later
*/
*/
void
(
*
wait_timer_tick
)(
void
)
=
wait_8254_wraparound
;
void
(
*
wait_timer_tick
)(
void
)
__initdata
=
wait_8254_wraparound
;
/*
/*
* This function sets up the local APIC timer, with a timeout of
* This function sets up the local APIC timer, with a timeout of
...
@@ -930,7 +930,7 @@ void __setup_APIC_LVTT(unsigned int clocks)
...
@@ -930,7 +930,7 @@ void __setup_APIC_LVTT(unsigned int clocks)
apic_write_around
(
APIC_TMICT
,
clocks
/
APIC_DIVISOR
);
apic_write_around
(
APIC_TMICT
,
clocks
/
APIC_DIVISOR
);
}
}
static
void
setup_APIC_timer
(
unsigned
int
clocks
)
static
void
__init
setup_APIC_timer
(
unsigned
int
clocks
)
{
{
unsigned
long
flags
;
unsigned
long
flags
;
...
...
arch/ppc64/mm/tlb.c
View file @
a77e4c96
...
@@ -85,8 +85,12 @@ void hpte_update(pte_t *ptep, unsigned long pte, int wrprot)
...
@@ -85,8 +85,12 @@ void hpte_update(pte_t *ptep, unsigned long pte, int wrprot)
ptepage
=
virt_to_page
(
ptep
);
ptepage
=
virt_to_page
(
ptep
);
mm
=
(
struct
mm_struct
*
)
ptepage
->
mapping
;
mm
=
(
struct
mm_struct
*
)
ptepage
->
mapping
;
addr
=
ptepage
->
index
+
addr
=
ptepage
->
index
;
(((
unsigned
long
)
ptep
&
~
PAGE_MASK
)
*
PTRS_PER_PTE
);
if
(
pte_huge
(
pte
))
addr
+=
((
unsigned
long
)
ptep
&
~
PAGE_MASK
)
/
sizeof
(
*
ptep
)
*
HPAGE_SIZE
;
else
addr
+=
((
unsigned
long
)
ptep
&
~
PAGE_MASK
)
*
PTRS_PER_PTE
;
if
(
REGION_ID
(
addr
)
==
USER_REGION_ID
)
if
(
REGION_ID
(
addr
)
==
USER_REGION_ID
)
context
=
mm
->
context
.
id
;
context
=
mm
->
context
.
id
;
...
...
drivers/block/cfq-iosched.c
View file @
a77e4c96
...
@@ -1819,7 +1819,7 @@ static struct elevator_type iosched_cfq = {
...
@@ -1819,7 +1819,7 @@ static struct elevator_type iosched_cfq = {
.
elevator_owner
=
THIS_MODULE
,
.
elevator_owner
=
THIS_MODULE
,
};
};
in
t
cfq_init
(
void
)
static
int
__ini
t
cfq_init
(
void
)
{
{
int
ret
;
int
ret
;
...
...
drivers/char/keyboard.c
View file @
a77e4c96
...
@@ -198,6 +198,8 @@ int setkeycode(unsigned int scancode, unsigned int keycode)
...
@@ -198,6 +198,8 @@ int setkeycode(unsigned int scancode, unsigned int keycode)
if
(
scancode
<
0
||
scancode
>=
dev
->
keycodemax
)
if
(
scancode
<
0
||
scancode
>=
dev
->
keycodemax
)
return
-
EINVAL
;
return
-
EINVAL
;
if
(
keycode
<
0
||
keycode
>
KEY_MAX
)
return
-
EINVAL
;
oldkey
=
SET_INPUT_KEYCODE
(
dev
,
scancode
,
keycode
);
oldkey
=
SET_INPUT_KEYCODE
(
dev
,
scancode
,
keycode
);
...
...
drivers/char/pty.c
View file @
a77e4c96
...
@@ -149,13 +149,15 @@ static int pty_write_room(struct tty_struct *tty)
...
@@ -149,13 +149,15 @@ static int pty_write_room(struct tty_struct *tty)
static
int
pty_chars_in_buffer
(
struct
tty_struct
*
tty
)
static
int
pty_chars_in_buffer
(
struct
tty_struct
*
tty
)
{
{
struct
tty_struct
*
to
=
tty
->
link
;
struct
tty_struct
*
to
=
tty
->
link
;
ssize_t
(
*
chars_in_buffer
)(
struct
tty_struct
*
);
int
count
;
int
count
;
if
(
!
to
||
!
to
->
ldisc
.
chars_in_buffer
)
/* We should get the line discipline lock for "tty->link" */
if
(
!
to
||
!
(
chars_in_buffer
=
to
->
ldisc
.
chars_in_buffer
))
return
0
;
return
0
;
/* The ldisc must report 0 if no characters available to be read */
/* The ldisc must report 0 if no characters available to be read */
count
=
to
->
ldisc
.
chars_in_buffer
(
to
);
count
=
chars_in_buffer
(
to
);
if
(
tty
->
driver
->
subtype
==
PTY_TYPE_SLAVE
)
return
count
;
if
(
tty
->
driver
->
subtype
==
PTY_TYPE_SLAVE
)
return
count
;
...
...
drivers/parport/parport_pc.c
View file @
a77e4c96
...
@@ -2488,7 +2488,7 @@ static int __devinit sio_ite_8872_probe (struct pci_dev *pdev, int autoirq,
...
@@ -2488,7 +2488,7 @@ static int __devinit sio_ite_8872_probe (struct pci_dev *pdev, int autoirq,
/* VIA 8231 support by Pavel Fedin <sonic_amiga@rambler.ru>
/* VIA 8231 support by Pavel Fedin <sonic_amiga@rambler.ru>
based on VIA 686a support code by Jeff Garzik <jgarzik@pobox.com> */
based on VIA 686a support code by Jeff Garzik <jgarzik@pobox.com> */
static
int
__initdata
parport_init_mode
=
0
;
static
int
__
dev
initdata
parport_init_mode
=
0
;
/* Data for two known VIA chips */
/* Data for two known VIA chips */
static
struct
parport_pc_via_data
via_686a_data
__devinitdata
=
{
static
struct
parport_pc_via_data
via_686a_data
__devinitdata
=
{
...
...
drivers/scsi/scsi_devinfo.c
View file @
a77e4c96
...
@@ -28,7 +28,7 @@ struct scsi_dev_info_list {
...
@@ -28,7 +28,7 @@ struct scsi_dev_info_list {
static
const
char
spaces
[]
=
" "
;
/* 16 of them */
static
const
char
spaces
[]
=
" "
;
/* 16 of them */
static
unsigned
scsi_default_dev_flags
;
static
unsigned
scsi_default_dev_flags
;
static
LIST_HEAD
(
scsi_dev_info_list
);
static
LIST_HEAD
(
scsi_dev_info_list
);
static
__initdata
char
scsi_dev_flags
[
256
];
static
char
scsi_dev_flags
[
256
];
/*
/*
* scsi_static_device_list: deprecated list of devices that require
* scsi_static_device_list: deprecated list of devices that require
...
...
drivers/usb/class/cdc-acm.c
View file @
a77e4c96
...
@@ -278,15 +278,14 @@ static int acm_tty_open(struct tty_struct *tty, struct file *filp)
...
@@ -278,15 +278,14 @@ static int acm_tty_open(struct tty_struct *tty, struct file *filp)
if
(
acm
->
used
)
{
if
(
acm
->
used
++
)
{
goto
done
;
goto
done
;
}
}
acm
->
ctrlurb
->
dev
=
acm
->
dev
;
acm
->
ctrlurb
->
dev
=
acm
->
dev
;
if
(
usb_submit_urb
(
acm
->
ctrlurb
,
GFP_KERNEL
))
{
if
(
usb_submit_urb
(
acm
->
ctrlurb
,
GFP_KERNEL
))
{
dbg
(
"usb_submit_urb(ctrl irq) failed"
);
dbg
(
"usb_submit_urb(ctrl irq) failed"
);
rv
=
-
EIO
;
goto
bail_out
;
goto
err_out
;
}
}
acm
->
readurb
->
dev
=
acm
->
dev
;
acm
->
readurb
->
dev
=
acm
->
dev
;
...
@@ -303,7 +302,6 @@ static int acm_tty_open(struct tty_struct *tty, struct file *filp)
...
@@ -303,7 +302,6 @@ static int acm_tty_open(struct tty_struct *tty, struct file *filp)
tty
->
low_latency
=
1
;
tty
->
low_latency
=
1
;
done:
done:
acm
->
used
++
;
err_out:
err_out:
up
(
&
open_sem
);
up
(
&
open_sem
);
return
rv
;
return
rv
;
...
@@ -312,6 +310,8 @@ static int acm_tty_open(struct tty_struct *tty, struct file *filp)
...
@@ -312,6 +310,8 @@ static int acm_tty_open(struct tty_struct *tty, struct file *filp)
usb_kill_urb
(
acm
->
readurb
);
usb_kill_urb
(
acm
->
readurb
);
bail_out_and_unlink:
bail_out_and_unlink:
usb_kill_urb
(
acm
->
ctrlurb
);
usb_kill_urb
(
acm
->
ctrlurb
);
bail_out:
acm
->
used
--
;
up
(
&
open_sem
);
up
(
&
open_sem
);
return
-
EIO
;
return
-
EIO
;
}
}
...
...
drivers/usb/core/devio.c
View file @
a77e4c96
...
@@ -841,7 +841,7 @@ static int proc_submiturb(struct dev_state *ps, void __user *arg)
...
@@ -841,7 +841,7 @@ static int proc_submiturb(struct dev_state *ps, void __user *arg)
if
((
ret
=
checkintf
(
ps
,
ifnum
)))
if
((
ret
=
checkintf
(
ps
,
ifnum
)))
return
ret
;
return
ret
;
}
}
if
((
uurb
.
endpoint
&
~
USB_ENDPOINT_DIR_MASK
)
!=
0
)
if
((
uurb
.
endpoint
&
USB_ENDPOINT_DIR_MASK
)
!=
0
)
ep
=
ps
->
dev
->
ep_in
[
uurb
.
endpoint
&
USB_ENDPOINT_NUMBER_MASK
];
ep
=
ps
->
dev
->
ep_in
[
uurb
.
endpoint
&
USB_ENDPOINT_NUMBER_MASK
];
else
else
ep
=
ps
->
dev
->
ep_out
[
uurb
.
endpoint
&
USB_ENDPOINT_NUMBER_MASK
];
ep
=
ps
->
dev
->
ep_out
[
uurb
.
endpoint
&
USB_ENDPOINT_NUMBER_MASK
];
...
...
drivers/video/modedb.c
View file @
a77e4c96
...
@@ -37,7 +37,7 @@ const char *global_mode_option;
...
@@ -37,7 +37,7 @@ const char *global_mode_option;
#define DEFAULT_MODEDB_INDEX 0
#define DEFAULT_MODEDB_INDEX 0
static
const
__init
struct
fb_videomode
modedb
[]
=
{
static
const
struct
fb_videomode
modedb
[]
=
{
{
{
/* 640x400 @ 70 Hz, 31.5 kHz hsync */
/* 640x400 @ 70 Hz, 31.5 kHz hsync */
NULL
,
70
,
640
,
400
,
39721
,
40
,
24
,
39
,
9
,
96
,
2
,
NULL
,
70
,
640
,
400
,
39721
,
40
,
24
,
39
,
9
,
96
,
2
,
...
...
fs/binfmt_elf.c
View file @
a77e4c96
...
@@ -803,13 +803,14 @@ static int load_elf_binary(struct linux_binprm * bprm, struct pt_regs * regs)
...
@@ -803,13 +803,14 @@ static int load_elf_binary(struct linux_binprm * bprm, struct pt_regs * regs)
nbyte
=
ELF_MIN_ALIGN
-
nbyte
;
nbyte
=
ELF_MIN_ALIGN
-
nbyte
;
if
(
nbyte
>
elf_brk
-
elf_bss
)
if
(
nbyte
>
elf_brk
-
elf_bss
)
nbyte
=
elf_brk
-
elf_bss
;
nbyte
=
elf_brk
-
elf_bss
;
/*
if
(
clear_user
((
void
__user
*
)
elf_bss
+
* This bss-zeroing can fail if the ELF file
load_bias
,
nbyte
))
{
* specifies odd protections. So we don't check
/*
* the return value
* This bss-zeroing can fail if the ELF
*/
* file specifies odd protections. So
(
void
)
clear_user
((
void
__user
*
)
elf_bss
+
* we don't check the return value
load_bias
,
nbyte
);
*/
}
}
}
}
}
...
...
include/linux/sysctl.h
View file @
a77e4c96
...
@@ -797,6 +797,8 @@ extern int proc_dointvec_jiffies(ctl_table *, int, struct file *,
...
@@ -797,6 +797,8 @@ extern int proc_dointvec_jiffies(ctl_table *, int, struct file *,
void
__user
*
,
size_t
*
,
loff_t
*
);
void
__user
*
,
size_t
*
,
loff_t
*
);
extern
int
proc_dointvec_userhz_jiffies
(
ctl_table
*
,
int
,
struct
file
*
,
extern
int
proc_dointvec_userhz_jiffies
(
ctl_table
*
,
int
,
struct
file
*
,
void
__user
*
,
size_t
*
,
loff_t
*
);
void
__user
*
,
size_t
*
,
loff_t
*
);
extern
int
proc_dointvec_ms_jiffies
(
ctl_table
*
,
int
,
struct
file
*
,
void
__user
*
,
size_t
*
,
loff_t
*
);
extern
int
proc_doulongvec_minmax
(
ctl_table
*
,
int
,
struct
file
*
,
extern
int
proc_doulongvec_minmax
(
ctl_table
*
,
int
,
struct
file
*
,
void
__user
*
,
size_t
*
,
loff_t
*
);
void
__user
*
,
size_t
*
,
loff_t
*
);
extern
int
proc_doulongvec_ms_jiffies_minmax
(
ctl_table
*
table
,
int
,
extern
int
proc_doulongvec_ms_jiffies_minmax
(
ctl_table
*
table
,
int
,
...
@@ -814,6 +816,7 @@ extern int do_sysctl_strategy (ctl_table *table,
...
@@ -814,6 +816,7 @@ extern int do_sysctl_strategy (ctl_table *table,
extern
ctl_handler
sysctl_string
;
extern
ctl_handler
sysctl_string
;
extern
ctl_handler
sysctl_intvec
;
extern
ctl_handler
sysctl_intvec
;
extern
ctl_handler
sysctl_jiffies
;
extern
ctl_handler
sysctl_jiffies
;
extern
ctl_handler
sysctl_ms_jiffies
;
/*
/*
...
...
include/net/ipv6.h
View file @
a77e4c96
...
@@ -149,6 +149,8 @@ extern atomic_t inet6_sock_nr;
...
@@ -149,6 +149,8 @@ extern atomic_t inet6_sock_nr;
int
snmp6_register_dev
(
struct
inet6_dev
*
idev
);
int
snmp6_register_dev
(
struct
inet6_dev
*
idev
);
int
snmp6_unregister_dev
(
struct
inet6_dev
*
idev
);
int
snmp6_unregister_dev
(
struct
inet6_dev
*
idev
);
int
snmp6_alloc_dev
(
struct
inet6_dev
*
idev
);
int
snmp6_free_dev
(
struct
inet6_dev
*
idev
);
int
snmp6_mib_init
(
void
*
ptr
[
2
],
size_t
mibsize
,
size_t
mibalign
);
int
snmp6_mib_init
(
void
*
ptr
[
2
],
size_t
mibsize
,
size_t
mibalign
);
void
snmp6_mib_free
(
void
*
ptr
[
2
]);
void
snmp6_mib_free
(
void
*
ptr
[
2
]);
...
...
kernel/sysctl.c
View file @
a77e4c96
...
@@ -1902,6 +1902,27 @@ static int do_proc_dointvec_userhz_jiffies_conv(int *negp, unsigned long *lvalp,
...
@@ -1902,6 +1902,27 @@ static int do_proc_dointvec_userhz_jiffies_conv(int *negp, unsigned long *lvalp,
return
0
;
return
0
;
}
}
static
int
do_proc_dointvec_ms_jiffies_conv
(
int
*
negp
,
unsigned
long
*
lvalp
,
int
*
valp
,
int
write
,
void
*
data
)
{
if
(
write
)
{
*
valp
=
msecs_to_jiffies
(
*
negp
?
-*
lvalp
:
*
lvalp
);
}
else
{
int
val
=
*
valp
;
unsigned
long
lval
;
if
(
val
<
0
)
{
*
negp
=
-
1
;
lval
=
(
unsigned
long
)
-
val
;
}
else
{
*
negp
=
0
;
lval
=
(
unsigned
long
)
val
;
}
*
lvalp
=
jiffies_to_msecs
(
lval
);
}
return
0
;
}
/**
/**
* proc_dointvec_jiffies - read a vector of integers as seconds
* proc_dointvec_jiffies - read a vector of integers as seconds
* @table: the sysctl table
* @table: the sysctl table
...
@@ -1946,6 +1967,28 @@ int proc_dointvec_userhz_jiffies(ctl_table *table, int write, struct file *filp,
...
@@ -1946,6 +1967,28 @@ int proc_dointvec_userhz_jiffies(ctl_table *table, int write, struct file *filp,
do_proc_dointvec_userhz_jiffies_conv
,
NULL
);
do_proc_dointvec_userhz_jiffies_conv
,
NULL
);
}
}
/**
* proc_dointvec_ms_jiffies - read a vector of integers as 1 milliseconds
* @table: the sysctl table
* @write: %TRUE if this is a write to the sysctl file
* @filp: the file structure
* @buffer: the user buffer
* @lenp: the size of the user buffer
*
* Reads/writes up to table->maxlen/sizeof(unsigned int) integer
* values from/to the user buffer, treated as an ASCII string.
* The values read are assumed to be in 1/1000 seconds, and
* are converted into jiffies.
*
* Returns 0 on success.
*/
int
proc_dointvec_ms_jiffies
(
ctl_table
*
table
,
int
write
,
struct
file
*
filp
,
void
__user
*
buffer
,
size_t
*
lenp
,
loff_t
*
ppos
)
{
return
do_proc_dointvec
(
table
,
write
,
filp
,
buffer
,
lenp
,
ppos
,
do_proc_dointvec_ms_jiffies_conv
,
NULL
);
}
#else
/* CONFIG_PROC_FS */
#else
/* CONFIG_PROC_FS */
int
proc_dostring
(
ctl_table
*
table
,
int
write
,
struct
file
*
filp
,
int
proc_dostring
(
ctl_table
*
table
,
int
write
,
struct
file
*
filp
,
...
@@ -1990,6 +2033,12 @@ int proc_dointvec_userhz_jiffies(ctl_table *table, int write, struct file *filp,
...
@@ -1990,6 +2033,12 @@ int proc_dointvec_userhz_jiffies(ctl_table *table, int write, struct file *filp,
return
-
ENOSYS
;
return
-
ENOSYS
;
}
}
int
proc_dointvec_ms_jiffies
(
ctl_table
*
table
,
int
write
,
struct
file
*
filp
,
void
__user
*
buffer
,
size_t
*
lenp
,
loff_t
*
ppos
)
{
return
-
ENOSYS
;
}
int
proc_doulongvec_minmax
(
ctl_table
*
table
,
int
write
,
struct
file
*
filp
,
int
proc_doulongvec_minmax
(
ctl_table
*
table
,
int
write
,
struct
file
*
filp
,
void
__user
*
buffer
,
size_t
*
lenp
,
loff_t
*
ppos
)
void
__user
*
buffer
,
size_t
*
lenp
,
loff_t
*
ppos
)
{
{
...
@@ -2119,6 +2168,33 @@ int sysctl_jiffies(ctl_table *table, int __user *name, int nlen,
...
@@ -2119,6 +2168,33 @@ int sysctl_jiffies(ctl_table *table, int __user *name, int nlen,
return
1
;
return
1
;
}
}
/* Strategy function to convert jiffies to seconds */
int
sysctl_ms_jiffies
(
ctl_table
*
table
,
int
__user
*
name
,
int
nlen
,
void
__user
*
oldval
,
size_t
__user
*
oldlenp
,
void
__user
*
newval
,
size_t
newlen
,
void
**
context
)
{
if
(
oldval
)
{
size_t
olen
;
if
(
oldlenp
)
{
if
(
get_user
(
olen
,
oldlenp
))
return
-
EFAULT
;
if
(
olen
!=
sizeof
(
int
))
return
-
EINVAL
;
}
if
(
put_user
(
jiffies_to_msecs
(
*
(
int
*
)(
table
->
data
)),
(
int
__user
*
)
oldval
)
||
(
oldlenp
&&
put_user
(
sizeof
(
int
),
oldlenp
)))
return
-
EFAULT
;
}
if
(
newval
&&
newlen
)
{
int
new
;
if
(
newlen
!=
sizeof
(
int
))
return
-
EINVAL
;
if
(
get_user
(
new
,
(
int
__user
*
)
newval
))
return
-
EFAULT
;
*
(
int
*
)(
table
->
data
)
=
msecs_to_jiffies
(
new
);
}
return
1
;
}
#else
/* CONFIG_SYSCTL */
#else
/* CONFIG_SYSCTL */
...
@@ -2149,6 +2225,13 @@ int sysctl_jiffies(ctl_table *table, int __user *name, int nlen,
...
@@ -2149,6 +2225,13 @@ int sysctl_jiffies(ctl_table *table, int __user *name, int nlen,
return
-
ENOSYS
;
return
-
ENOSYS
;
}
}
int
sysctl_ms_jiffies
(
ctl_table
*
table
,
int
__user
*
name
,
int
nlen
,
void
__user
*
oldval
,
size_t
__user
*
oldlenp
,
void
__user
*
newval
,
size_t
newlen
,
void
**
context
)
{
return
-
ENOSYS
;
}
int
proc_dostring
(
ctl_table
*
table
,
int
write
,
struct
file
*
filp
,
int
proc_dostring
(
ctl_table
*
table
,
int
write
,
struct
file
*
filp
,
void
__user
*
buffer
,
size_t
*
lenp
,
loff_t
*
ppos
)
void
__user
*
buffer
,
size_t
*
lenp
,
loff_t
*
ppos
)
{
{
...
@@ -2185,6 +2268,12 @@ int proc_dointvec_userhz_jiffies(ctl_table *table, int write, struct file *filp,
...
@@ -2185,6 +2268,12 @@ int proc_dointvec_userhz_jiffies(ctl_table *table, int write, struct file *filp,
return
-
ENOSYS
;
return
-
ENOSYS
;
}
}
int
proc_dointvec_ms_jiffies
(
ctl_table
*
table
,
int
write
,
struct
file
*
filp
,
void
__user
*
buffer
,
size_t
*
lenp
,
loff_t
*
ppos
)
{
return
-
ENOSYS
;
}
int
proc_doulongvec_minmax
(
ctl_table
*
table
,
int
write
,
struct
file
*
filp
,
int
proc_doulongvec_minmax
(
ctl_table
*
table
,
int
write
,
struct
file
*
filp
,
void
__user
*
buffer
,
size_t
*
lenp
,
loff_t
*
ppos
)
void
__user
*
buffer
,
size_t
*
lenp
,
loff_t
*
ppos
)
{
{
...
@@ -2219,11 +2308,13 @@ EXPORT_SYMBOL(proc_dointvec);
...
@@ -2219,11 +2308,13 @@ EXPORT_SYMBOL(proc_dointvec);
EXPORT_SYMBOL
(
proc_dointvec_jiffies
);
EXPORT_SYMBOL
(
proc_dointvec_jiffies
);
EXPORT_SYMBOL
(
proc_dointvec_minmax
);
EXPORT_SYMBOL
(
proc_dointvec_minmax
);
EXPORT_SYMBOL
(
proc_dointvec_userhz_jiffies
);
EXPORT_SYMBOL
(
proc_dointvec_userhz_jiffies
);
EXPORT_SYMBOL
(
proc_dointvec_ms_jiffies
);
EXPORT_SYMBOL
(
proc_dostring
);
EXPORT_SYMBOL
(
proc_dostring
);
EXPORT_SYMBOL
(
proc_doulongvec_minmax
);
EXPORT_SYMBOL
(
proc_doulongvec_minmax
);
EXPORT_SYMBOL
(
proc_doulongvec_ms_jiffies_minmax
);
EXPORT_SYMBOL
(
proc_doulongvec_ms_jiffies_minmax
);
EXPORT_SYMBOL
(
register_sysctl_table
);
EXPORT_SYMBOL
(
register_sysctl_table
);
EXPORT_SYMBOL
(
sysctl_intvec
);
EXPORT_SYMBOL
(
sysctl_intvec
);
EXPORT_SYMBOL
(
sysctl_jiffies
);
EXPORT_SYMBOL
(
sysctl_jiffies
);
EXPORT_SYMBOL
(
sysctl_ms_jiffies
);
EXPORT_SYMBOL
(
sysctl_string
);
EXPORT_SYMBOL
(
sysctl_string
);
EXPORT_SYMBOL
(
unregister_sysctl_table
);
EXPORT_SYMBOL
(
unregister_sysctl_table
);
net/core/pktgen.c
View file @
a77e4c96
...
@@ -104,6 +104,8 @@
...
@@ -104,6 +104,8 @@
* Corrections from Nikolai Malykh (nmalykh@bilim.com)
* Corrections from Nikolai Malykh (nmalykh@bilim.com)
* Removed unused flags F_SET_SRCMAC & F_SET_SRCIP 041230
* Removed unused flags F_SET_SRCMAC & F_SET_SRCIP 041230
*
*
* interruptible_sleep_on_timeout() replaced Nishanth Aravamudan <nacc@us.ibm.com>
* 050103
*/
*/
#include <linux/sys.h>
#include <linux/sys.h>
#include <linux/types.h>
#include <linux/types.h>
...
@@ -135,6 +137,7 @@
...
@@ -135,6 +137,7 @@
#include <linux/ipv6.h>
#include <linux/ipv6.h>
#include <linux/udp.h>
#include <linux/udp.h>
#include <linux/proc_fs.h>
#include <linux/proc_fs.h>
#include <linux/wait.h>
#include <net/checksum.h>
#include <net/checksum.h>
#include <net/ipv6.h>
#include <net/ipv6.h>
#include <net/addrconf.h>
#include <net/addrconf.h>
...
@@ -148,7 +151,7 @@
...
@@ -148,7 +151,7 @@
#include <asm/timex.h>
#include <asm/timex.h>
#define VERSION "pktgen v2.5
6
: Packet Generator for packet performance testing.\n"
#define VERSION "pktgen v2.5
8
: Packet Generator for packet performance testing.\n"
/* #define PG_DEBUG(a) a */
/* #define PG_DEBUG(a) a */
#define PG_DEBUG(a)
#define PG_DEBUG(a)
...
@@ -808,6 +811,7 @@ static int proc_if_write(struct file *file, const char __user *user_buffer,
...
@@ -808,6 +811,7 @@ static int proc_if_write(struct file *file, const char __user *user_buffer,
struct
pktgen_dev
*
pkt_dev
=
(
struct
pktgen_dev
*
)(
data
);
struct
pktgen_dev
*
pkt_dev
=
(
struct
pktgen_dev
*
)(
data
);
char
*
pg_result
=
NULL
;
char
*
pg_result
=
NULL
;
int
tmp
=
0
;
int
tmp
=
0
;
char
buf
[
128
];
pg_result
=
&
(
pkt_dev
->
result
[
0
]);
pg_result
=
&
(
pkt_dev
->
result
[
0
]);
...
@@ -1068,7 +1072,6 @@ static int proc_if_write(struct file *file, const char __user *user_buffer,
...
@@ -1068,7 +1072,6 @@ static int proc_if_write(struct file *file, const char __user *user_buffer,
return
count
;
return
count
;
}
}
if
(
!
strcmp
(
name
,
"dst_min"
)
||
!
strcmp
(
name
,
"dst"
))
{
if
(
!
strcmp
(
name
,
"dst_min"
)
||
!
strcmp
(
name
,
"dst"
))
{
char
buf
[
IP_NAME_SZ
];
len
=
strn_len
(
&
user_buffer
[
i
],
sizeof
(
pkt_dev
->
dst_min
)
-
1
);
len
=
strn_len
(
&
user_buffer
[
i
],
sizeof
(
pkt_dev
->
dst_min
)
-
1
);
if
(
len
<
0
)
{
return
len
;
}
if
(
len
<
0
)
{
return
len
;
}
...
@@ -1088,7 +1091,6 @@ static int proc_if_write(struct file *file, const char __user *user_buffer,
...
@@ -1088,7 +1091,6 @@ static int proc_if_write(struct file *file, const char __user *user_buffer,
return
count
;
return
count
;
}
}
if
(
!
strcmp
(
name
,
"dst_max"
))
{
if
(
!
strcmp
(
name
,
"dst_max"
))
{
char
buf
[
IP_NAME_SZ
];
len
=
strn_len
(
&
user_buffer
[
i
],
sizeof
(
pkt_dev
->
dst_max
)
-
1
);
len
=
strn_len
(
&
user_buffer
[
i
],
sizeof
(
pkt_dev
->
dst_max
)
-
1
);
if
(
len
<
0
)
{
return
len
;
}
if
(
len
<
0
)
{
return
len
;
}
...
@@ -1109,9 +1111,7 @@ static int proc_if_write(struct file *file, const char __user *user_buffer,
...
@@ -1109,9 +1111,7 @@ static int proc_if_write(struct file *file, const char __user *user_buffer,
return
count
;
return
count
;
}
}
if
(
!
strcmp
(
name
,
"dst6"
))
{
if
(
!
strcmp
(
name
,
"dst6"
))
{
char
buf
[
128
];
len
=
strn_len
(
&
user_buffer
[
i
],
sizeof
(
buf
)
-
1
);
len
=
strn_len
(
&
user_buffer
[
i
],
128
-
1
);
if
(
len
<
0
)
return
len
;
if
(
len
<
0
)
return
len
;
pkt_dev
->
flags
|=
F_IPV6
;
pkt_dev
->
flags
|=
F_IPV6
;
...
@@ -1133,9 +1133,7 @@ static int proc_if_write(struct file *file, const char __user *user_buffer,
...
@@ -1133,9 +1133,7 @@ static int proc_if_write(struct file *file, const char __user *user_buffer,
return
count
;
return
count
;
}
}
if
(
!
strcmp
(
name
,
"dst6_min"
))
{
if
(
!
strcmp
(
name
,
"dst6_min"
))
{
char
buf
[
128
];
len
=
strn_len
(
&
user_buffer
[
i
],
sizeof
(
buf
)
-
1
);
len
=
strn_len
(
&
user_buffer
[
i
],
128
-
1
);
if
(
len
<
0
)
return
len
;
if
(
len
<
0
)
return
len
;
pkt_dev
->
flags
|=
F_IPV6
;
pkt_dev
->
flags
|=
F_IPV6
;
...
@@ -1156,9 +1154,7 @@ static int proc_if_write(struct file *file, const char __user *user_buffer,
...
@@ -1156,9 +1154,7 @@ static int proc_if_write(struct file *file, const char __user *user_buffer,
return
count
;
return
count
;
}
}
if
(
!
strcmp
(
name
,
"dst6_max"
))
{
if
(
!
strcmp
(
name
,
"dst6_max"
))
{
char
buf
[
128
];
len
=
strn_len
(
&
user_buffer
[
i
],
sizeof
(
buf
)
-
1
);
len
=
strn_len
(
&
user_buffer
[
i
],
128
-
1
);
if
(
len
<
0
)
return
len
;
if
(
len
<
0
)
return
len
;
pkt_dev
->
flags
|=
F_IPV6
;
pkt_dev
->
flags
|=
F_IPV6
;
...
@@ -1178,9 +1174,7 @@ static int proc_if_write(struct file *file, const char __user *user_buffer,
...
@@ -1178,9 +1174,7 @@ static int proc_if_write(struct file *file, const char __user *user_buffer,
return
count
;
return
count
;
}
}
if
(
!
strcmp
(
name
,
"src6"
))
{
if
(
!
strcmp
(
name
,
"src6"
))
{
char
buf
[
128
];
len
=
strn_len
(
&
user_buffer
[
i
],
sizeof
(
buf
)
-
1
);
len
=
strn_len
(
&
user_buffer
[
i
],
128
-
1
);
if
(
len
<
0
)
return
len
;
if
(
len
<
0
)
return
len
;
pkt_dev
->
flags
|=
F_IPV6
;
pkt_dev
->
flags
|=
F_IPV6
;
...
@@ -1202,7 +1196,6 @@ static int proc_if_write(struct file *file, const char __user *user_buffer,
...
@@ -1202,7 +1196,6 @@ static int proc_if_write(struct file *file, const char __user *user_buffer,
return
count
;
return
count
;
}
}
if
(
!
strcmp
(
name
,
"src_min"
))
{
if
(
!
strcmp
(
name
,
"src_min"
))
{
char
buf
[
IP_NAME_SZ
];
len
=
strn_len
(
&
user_buffer
[
i
],
sizeof
(
pkt_dev
->
src_min
)
-
1
);
len
=
strn_len
(
&
user_buffer
[
i
],
sizeof
(
pkt_dev
->
src_min
)
-
1
);
if
(
len
<
0
)
{
return
len
;
}
if
(
len
<
0
)
{
return
len
;
}
if
(
copy_from_user
(
buf
,
&
user_buffer
[
i
],
len
))
if
(
copy_from_user
(
buf
,
&
user_buffer
[
i
],
len
))
...
@@ -1221,7 +1214,6 @@ static int proc_if_write(struct file *file, const char __user *user_buffer,
...
@@ -1221,7 +1214,6 @@ static int proc_if_write(struct file *file, const char __user *user_buffer,
return
count
;
return
count
;
}
}
if
(
!
strcmp
(
name
,
"src_max"
))
{
if
(
!
strcmp
(
name
,
"src_max"
))
{
char
buf
[
IP_NAME_SZ
];
len
=
strn_len
(
&
user_buffer
[
i
],
sizeof
(
pkt_dev
->
src_max
)
-
1
);
len
=
strn_len
(
&
user_buffer
[
i
],
sizeof
(
pkt_dev
->
src_max
)
-
1
);
if
(
len
<
0
)
{
return
len
;
}
if
(
len
<
0
)
{
return
len
;
}
if
(
copy_from_user
(
buf
,
&
user_buffer
[
i
],
len
))
if
(
copy_from_user
(
buf
,
&
user_buffer
[
i
],
len
))
...
@@ -2402,16 +2394,14 @@ static int thread_is_running(struct pktgen_thread *t )
...
@@ -2402,16 +2394,14 @@ static int thread_is_running(struct pktgen_thread *t )
static
int
pktgen_wait_thread_run
(
struct
pktgen_thread
*
t
)
static
int
pktgen_wait_thread_run
(
struct
pktgen_thread
*
t
)
{
{
wait_queue_head_t
queue
;
init_waitqueue_head
(
&
queue
);
if_lock
(
t
);
if_lock
(
t
);
while
(
thread_is_running
(
t
))
{
while
(
thread_is_running
(
t
))
{
if_unlock
(
t
);
if_unlock
(
t
);
interruptible_sleep_on_timeout
(
&
queue
,
HZ
/
10
);
msleep_interruptible
(
100
);
if
(
signal_pending
(
current
))
if
(
signal_pending
(
current
))
goto
signal
;
goto
signal
;
if_lock
(
t
);
if_lock
(
t
);
...
@@ -2738,6 +2728,7 @@ __inline__ void pktgen_xmit(struct pktgen_dev *pkt_dev)
...
@@ -2738,6 +2728,7 @@ __inline__ void pktgen_xmit(struct pktgen_dev *pkt_dev)
static
void
pktgen_thread_worker
(
struct
pktgen_thread
*
t
)
static
void
pktgen_thread_worker
(
struct
pktgen_thread
*
t
)
{
{
DEFINE_WAIT
(
wait
);
struct
pktgen_dev
*
pkt_dev
=
NULL
;
struct
pktgen_dev
*
pkt_dev
=
NULL
;
int
cpu
=
t
->
cpu
;
int
cpu
=
t
->
cpu
;
sigset_t
tmpsig
;
sigset_t
tmpsig
;
...
@@ -2805,9 +2796,11 @@ static void pktgen_thread_worker(struct pktgen_thread *t)
...
@@ -2805,9 +2796,11 @@ static void pktgen_thread_worker(struct pktgen_thread *t)
do_softirq
();
do_softirq
();
tx_since_softirq
=
0
;
tx_since_softirq
=
0
;
}
}
}
else
{
prepare_to_wait
(
&
(
t
->
queue
),
&
wait
,
TASK_INTERRUPTIBLE
);
schedule_timeout
(
HZ
/
10
);
finish_wait
(
&
(
t
->
queue
),
&
wait
);
}
}
else
interruptible_sleep_on_timeout
(
&
(
t
->
queue
),
HZ
/
10
);
/*
/*
* Back from sleep, either due to the timeout or signal.
* Back from sleep, either due to the timeout or signal.
...
@@ -3117,8 +3110,7 @@ static void __exit pg_cleanup(void)
...
@@ -3117,8 +3110,7 @@ static void __exit pg_cleanup(void)
struct
pktgen_thread
*
t
=
pktgen_threads
;
struct
pktgen_thread
*
t
=
pktgen_threads
;
pktgen_threads
->
control
|=
(
T_TERMINATE
);
pktgen_threads
->
control
|=
(
T_TERMINATE
);
while
(
t
==
pktgen_threads
)
wait_event_interruptible_timeout
(
queue
,
(
t
!=
pktgen_threads
),
HZ
);
interruptible_sleep_on_timeout
(
&
queue
,
HZ
);
}
}
/* Un-register us from receiving netdevice events */
/* Un-register us from receiving netdevice events */
...
...
net/ipv4/netfilter/ip_conntrack_standalone.c
View file @
a77e4c96
...
@@ -384,10 +384,12 @@ static unsigned int ip_conntrack_defrag(unsigned int hooknum,
...
@@ -384,10 +384,12 @@ static unsigned int ip_conntrack_defrag(unsigned int hooknum,
const
struct
net_device
*
out
,
const
struct
net_device
*
out
,
int
(
*
okfn
)(
struct
sk_buff
*
))
int
(
*
okfn
)(
struct
sk_buff
*
))
{
{
#if !defined(CONFIG_IP_NF_NAT) && !defined(CONFIG_IP_NF_NAT_MODULE)
/* Previously seen (loopback)? Ignore. Do this before
/* Previously seen (loopback)? Ignore. Do this before
fragment check. */
fragment check. */
if
((
*
pskb
)
->
nfct
)
if
((
*
pskb
)
->
nfct
)
return
NF_ACCEPT
;
return
NF_ACCEPT
;
#endif
/* Gather fragments. */
/* Gather fragments. */
if
((
*
pskb
)
->
nh
.
iph
->
frag_off
&
htons
(
IP_MF
|
IP_OFFSET
))
{
if
((
*
pskb
)
->
nh
.
iph
->
frag_off
&
htons
(
IP_MF
|
IP_OFFSET
))
{
...
...
net/ipv4/netfilter/ipt_hashlimit.c
View file @
a77e4c96
...
@@ -98,6 +98,7 @@ struct ipt_hashlimit_htable {
...
@@ -98,6 +98,7 @@ struct ipt_hashlimit_htable {
};
};
static
DECLARE_RWLOCK
(
hashlimit_lock
);
/* protects htables list */
static
DECLARE_RWLOCK
(
hashlimit_lock
);
/* protects htables list */
static
DECLARE_MUTEX
(
hlimit_mutex
);
/* additional checkentry protection */
static
LIST_HEAD
(
hashlimit_htables
);
static
LIST_HEAD
(
hashlimit_htables
);
static
kmem_cache_t
*
hashlimit_cachep
;
static
kmem_cache_t
*
hashlimit_cachep
;
...
@@ -531,10 +532,19 @@ hashlimit_checkentry(const char *tablename,
...
@@ -531,10 +532,19 @@ hashlimit_checkentry(const char *tablename,
if
(
!
r
->
cfg
.
expire
)
if
(
!
r
->
cfg
.
expire
)
return
0
;
return
0
;
/* This is the best we've got: We cannot release and re-grab lock,
* since checkentry() is called before ip_tables.c grabs ipt_mutex.
* We also cannot grab the hashtable spinlock, since htable_create will
* call vmalloc, and that can sleep. And we cannot just re-search
* the list of htable's in htable_create(), since then we would
* create duplicate proc files. -HW */
down
(
&
hlimit_mutex
);
r
->
hinfo
=
htable_find_get
(
r
->
name
);
r
->
hinfo
=
htable_find_get
(
r
->
name
);
if
(
!
r
->
hinfo
&&
(
htable_create
(
r
)
!=
0
))
{
if
(
!
r
->
hinfo
&&
(
htable_create
(
r
)
!=
0
))
{
up
(
&
hlimit_mutex
);
return
0
;
return
0
;
}
}
up
(
&
hlimit_mutex
);
/* Ugly hack: For SMP, we only want to use one set */
/* Ugly hack: For SMP, we only want to use one set */
r
->
u
.
master
=
r
;
r
->
u
.
master
=
r
;
...
...
net/ipv4/route.c
View file @
a77e4c96
...
@@ -2545,10 +2545,10 @@ ctl_table ipv4_route_table[] = {
...
@@ -2545,10 +2545,10 @@ ctl_table ipv4_route_table[] = {
.
ctl_name
=
NET_IPV4_ROUTE_GC_MIN_INTERVAL_MS
,
.
ctl_name
=
NET_IPV4_ROUTE_GC_MIN_INTERVAL_MS
,
.
procname
=
"gc_min_interval_ms"
,
.
procname
=
"gc_min_interval_ms"
,
.
data
=
&
ip_rt_gc_min_interval
,
.
data
=
&
ip_rt_gc_min_interval
,
.
maxlen
=
sizeof
(
unsigned
long
),
.
maxlen
=
sizeof
(
int
),
.
mode
=
0644
,
.
mode
=
0644
,
.
proc_handler
=
&
proc_do
ulongvec_ms_jiffies_minmax
,
.
proc_handler
=
&
proc_do
intvec_ms_jiffies
,
.
strategy
=
&
sysctl_jiffies
,
.
strategy
=
&
sysctl_
ms_
jiffies
,
},
},
{
{
.
ctl_name
=
NET_IPV4_ROUTE_GC_TIMEOUT
,
.
ctl_name
=
NET_IPV4_ROUTE_GC_TIMEOUT
,
...
...
net/ipv6/addrconf.c
View file @
a77e4c96
...
@@ -308,7 +308,7 @@ void in6_dev_finish_destroy(struct inet6_dev *idev)
...
@@ -308,7 +308,7 @@ void in6_dev_finish_destroy(struct inet6_dev *idev)
printk
(
"Freeing alive inet6 device %p
\n
"
,
idev
);
printk
(
"Freeing alive inet6 device %p
\n
"
,
idev
);
return
;
return
;
}
}
snmp6_
unregister
_dev
(
idev
);
snmp6_
free
_dev
(
idev
);
kfree
(
idev
);
kfree
(
idev
);
}
}
...
@@ -339,6 +339,16 @@ static struct inet6_dev * ipv6_add_dev(struct net_device *dev)
...
@@ -339,6 +339,16 @@ static struct inet6_dev * ipv6_add_dev(struct net_device *dev)
/* We refer to the device */
/* We refer to the device */
dev_hold
(
dev
);
dev_hold
(
dev
);
if
(
snmp6_alloc_dev
(
ndev
)
<
0
)
{
ADBG
((
KERN_WARNING
"%s(): cannot allocate memory for statistics; dev=%s.
\n
"
,
__FUNCTION__
,
dev
->
name
));
neigh_parms_release
(
&
nd_tbl
,
ndev
->
nd_parms
);
ndev
->
dead
=
1
;
in6_dev_finish_destroy
(
ndev
);
return
NULL
;
}
if
(
snmp6_register_dev
(
ndev
)
<
0
)
{
if
(
snmp6_register_dev
(
ndev
)
<
0
)
{
ADBG
((
KERN_WARNING
ADBG
((
KERN_WARNING
"%s(): cannot create /proc/net/dev_snmp6/%s
\n
"
,
"%s(): cannot create /proc/net/dev_snmp6/%s
\n
"
,
...
@@ -2013,6 +2023,10 @@ static int addrconf_ifdown(struct net_device *dev, int how)
...
@@ -2013,6 +2023,10 @@ static int addrconf_ifdown(struct net_device *dev, int how)
dev
->
ip6_ptr
=
NULL
;
dev
->
ip6_ptr
=
NULL
;
idev
->
dead
=
1
;
idev
->
dead
=
1
;
write_unlock_bh
(
&
addrconf_lock
);
write_unlock_bh
(
&
addrconf_lock
);
/* Step 1.5: remove snmp6 entry */
snmp6_unregister_dev
(
idev
);
}
}
/* Step 2: clear hash table */
/* Step 2: clear hash table */
...
...
net/ipv6/af_inet6.c
View file @
a77e4c96
...
@@ -652,8 +652,10 @@ snmp6_mib_free(void *ptr[2])
...
@@ -652,8 +652,10 @@ snmp6_mib_free(void *ptr[2])
{
{
if
(
ptr
==
NULL
)
if
(
ptr
==
NULL
)
return
;
return
;
free_percpu
(
ptr
[
0
]);
if
(
ptr
[
0
])
free_percpu
(
ptr
[
1
]);
free_percpu
(
ptr
[
0
]);
if
(
ptr
[
1
])
free_percpu
(
ptr
[
1
]);
ptr
[
0
]
=
ptr
[
1
]
=
NULL
;
ptr
[
0
]
=
ptr
[
1
]
=
NULL
;
}
}
...
...
net/ipv6/proc.c
View file @
a77e4c96
...
@@ -201,33 +201,23 @@ static struct file_operations snmp6_seq_fops = {
...
@@ -201,33 +201,23 @@ static struct file_operations snmp6_seq_fops = {
int
snmp6_register_dev
(
struct
inet6_dev
*
idev
)
int
snmp6_register_dev
(
struct
inet6_dev
*
idev
)
{
{
int
err
=
-
ENOMEM
;
struct
proc_dir_entry
*
p
;
struct
proc_dir_entry
*
p
;
if
(
!
idev
||
!
idev
->
dev
)
if
(
!
idev
||
!
idev
->
dev
)
return
-
EINVAL
;
return
-
EINVAL
;
if
(
snmp6_mib_init
((
void
**
)
idev
->
stats
.
icmpv6
,
sizeof
(
struct
icmpv6_mib
),
if
(
!
proc_net_devsnmp6
)
__alignof__
(
struct
icmpv6_mib
))
<
0
)
return
-
ENOENT
;
goto
err_icmp
;
if
(
!
proc_net_devsnmp6
)
{
err
=
-
ENOENT
;
goto
err_proc
;
}
p
=
create_proc_entry
(
idev
->
dev
->
name
,
S_IRUGO
,
proc_net_devsnmp6
);
p
=
create_proc_entry
(
idev
->
dev
->
name
,
S_IRUGO
,
proc_net_devsnmp6
);
if
(
!
p
)
if
(
!
p
)
goto
err_proc
;
return
-
ENOMEM
;
p
->
data
=
idev
;
p
->
data
=
idev
;
p
->
proc_fops
=
&
snmp6_seq_fops
;
p
->
proc_fops
=
&
snmp6_seq_fops
;
idev
->
stats
.
proc_dir_entry
=
p
;
idev
->
stats
.
proc_dir_entry
=
p
;
return
0
;
return
0
;
err_proc:
snmp6_mib_free
((
void
**
)
idev
->
stats
.
icmpv6
);
err_icmp:
return
err
;
}
}
int
snmp6_unregister_dev
(
struct
inet6_dev
*
idev
)
int
snmp6_unregister_dev
(
struct
inet6_dev
*
idev
)
...
@@ -238,8 +228,6 @@ int snmp6_unregister_dev(struct inet6_dev *idev)
...
@@ -238,8 +228,6 @@ int snmp6_unregister_dev(struct inet6_dev *idev)
return
-
EINVAL
;
return
-
EINVAL
;
remove_proc_entry
(
idev
->
stats
.
proc_dir_entry
->
name
,
remove_proc_entry
(
idev
->
stats
.
proc_dir_entry
->
name
,
proc_net_devsnmp6
);
proc_net_devsnmp6
);
snmp6_mib_free
((
void
**
)
idev
->
stats
.
icmpv6
);
return
0
;
return
0
;
}
}
...
@@ -279,6 +267,17 @@ void ipv6_misc_proc_exit(void)
...
@@ -279,6 +267,17 @@ void ipv6_misc_proc_exit(void)
int
snmp6_register_dev
(
struct
inet6_dev
*
idev
)
int
snmp6_register_dev
(
struct
inet6_dev
*
idev
)
{
return
0
;
}
int
snmp6_unregister_dev
(
struct
inet6_dev
*
idev
)
{
return
0
;
}
#endif
/* CONFIG_PROC_FS */
int
snmp6_alloc_dev
(
struct
inet6_dev
*
idev
)
{
{
int
err
=
-
ENOMEM
;
int
err
=
-
ENOMEM
;
...
@@ -295,11 +294,10 @@ int snmp6_register_dev(struct inet6_dev *idev)
...
@@ -295,11 +294,10 @@ int snmp6_register_dev(struct inet6_dev *idev)
return
err
;
return
err
;
}
}
int
snmp6_
unregister
_dev
(
struct
inet6_dev
*
idev
)
int
snmp6_
free
_dev
(
struct
inet6_dev
*
idev
)
{
{
snmp6_mib_free
((
void
**
)
idev
->
stats
.
icmpv6
);
snmp6_mib_free
((
void
**
)
idev
->
stats
.
icmpv6
);
return
0
;
return
0
;
}
}
#endif
security/keys/compat.c
View file @
a77e4c96
...
@@ -31,7 +31,7 @@ asmlinkage long compat_sys_keyctl(u32 option,
...
@@ -31,7 +31,7 @@ asmlinkage long compat_sys_keyctl(u32 option,
return
keyctl_get_keyring_ID
(
arg2
,
arg3
);
return
keyctl_get_keyring_ID
(
arg2
,
arg3
);
case
KEYCTL_JOIN_SESSION_KEYRING
:
case
KEYCTL_JOIN_SESSION_KEYRING
:
return
keyctl_join_session_keyring
(
compat_ptr
(
arg
3
));
return
keyctl_join_session_keyring
(
compat_ptr
(
arg
2
));
case
KEYCTL_UPDATE
:
case
KEYCTL_UPDATE
:
return
keyctl_update_key
(
arg2
,
compat_ptr
(
arg3
),
arg4
);
return
keyctl_update_key
(
arg2
,
compat_ptr
(
arg3
),
arg4
);
...
...
security/keys/keyctl.c
View file @
a77e4c96
...
@@ -923,7 +923,7 @@ asmlinkage long sys_keyctl(int option, unsigned long arg2, unsigned long arg3,
...
@@ -923,7 +923,7 @@ asmlinkage long sys_keyctl(int option, unsigned long arg2, unsigned long arg3,
(
int
)
arg3
);
(
int
)
arg3
);
case
KEYCTL_JOIN_SESSION_KEYRING
:
case
KEYCTL_JOIN_SESSION_KEYRING
:
return
keyctl_join_session_keyring
((
const
char
__user
*
)
arg
3
);
return
keyctl_join_session_keyring
((
const
char
__user
*
)
arg
2
);
case
KEYCTL_UPDATE
:
case
KEYCTL_UPDATE
:
return
keyctl_update_key
((
key_serial_t
)
arg2
,
return
keyctl_update_key
((
key_serial_t
)
arg2
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment