The hosts had the better chances as Lee Gregory volleyed over and Steve Morison headed Shane Ferguson's cross wide.
Walsall's best chance saw Florent Cuvelier long-range strike held by Millwall goalkeeper Jordan Archer.
Substitute Aiden O'Brien fired over from long range as Millwall closed the gap on the play-offs to four points.
Match ends, Millwall 0, Walsall 0.
Second Half ends, Millwall 0, Walsall 0.
Delay in match Jason McCarthy (Walsall) because of an injury.
Foul by Steve Morison (Millwall).
Eoghan O'Connell (Walsall) wins a free kick in the attacking half.
Foul by Shaun Cummings (Millwall).
Simeon Jackson (Walsall) wins a free kick in the defensive half.
Corner,  Walsall. Conceded by Shaun Cummings.
Foul by Aiden O'Brien (Millwall).
Joe Edwards (Walsall) wins a free kick in the defensive half.
Attempt missed. Kieron Morris (Walsall) left footed shot from outside the box is high and wide to the left.
Substitution, Walsall. Will Randall-Hurren replaces Erhun Oztumer.
Attempt missed. Aiden O'Brien (Millwall) right footed shot from outside the box is high and wide to the right.
Foul by Ben Thompson (Millwall).
Joe Edwards (Walsall) wins a free kick on the right wing.
Shaun Williams (Millwall) wins a free kick in the defensive half.
Foul by Simeon Jackson (Walsall).
Substitution, Walsall. Kieron Morris replaces Florent Cuvelier.
Attempt missed. Joe Edwards (Walsall) header from the left side of the box is close, but misses to the left.
Joe Edwards (Walsall) is shown the yellow card for a bad foul.
Fred Onyedinma (Millwall) wins a free kick on the right wing.
Foul by Joe Edwards (Walsall).
Attempt blocked. Aiden O'Brien (Millwall) right footed shot from outside the box is blocked.
Substitution, Walsall. Simeon Jackson replaces Amadou Bakayoko.
Substitution, Millwall. Fred Onyedinma replaces Jed Wallace.
Substitution, Millwall. Aiden O'Brien replaces Shane Ferguson.
Steve Morison (Millwall) wins a free kick in the attacking half.
Foul by Eoghan O'Connell (Walsall).
Corner,  Millwall. Conceded by Eoghan O'Connell.
Attempt blocked. Ben Thompson (Millwall) right footed shot from outside the box is blocked.
Corner,  Millwall. Conceded by Eoghan O'Connell.
Attempt missed. Joe Edwards (Walsall) left footed shot from the left side of the box is close, but misses to the left.
Ben Thompson (Millwall) wins a free kick in the attacking half.
Foul by Florent Cuvelier (Walsall).
Foul by Steve Morison (Millwall).
Isaiah Osbourne (Walsall) wins a free kick in the attacking half.
Lee Gregory (Millwall) wins a free kick on the right wing.
Foul by Eoghan O'Connell (Walsall).
Second Half begins Millwall 0, Walsall 0.
First Half ends, Millwall 0, Walsall 0.
League One play-off chasing Millwall missed the chance to make significant ground on the top six as they were held to a goalless draw by Walsall.